Qual è l'attributo "KeyPath" di wix?


125

Cos'è l' attributo " KeyPath " di Wix ? In particolare, come si applica a quanto segue:

<Component Id="ProgramMenuDir" Guid="*">
  <RemoveFolder Id="ProgramMenuDir" On="uninstall" />
  <RegistryValue Root="HKCU" Key="Software\CompName\AppName" 
                 Type="string" Value="" KeyPath="yes" />
</Component>

112
OMG la documentazione Wix è completamente inutile. Il documento wix dice, per l'attributo KeyPath, che se lo imposti su "Sì", il file viene trattato come il percorso della chiave per il componente. Veramente utile !!
Cheeso

5
@ RobMensching - apprezza il tuo spirito e la volontà di contribuire alla comunità. Dirmi come NON lamentarmi non è buono come dirmi (e altri) come lamentarmi. Se avessi saputo dove sollevare un bug, 2 anni fa, l'avrei fatto. Inoltre, come puoi vedere dai voti positivi, apparentemente altre persone si sentono allo stesso modo. Forse è il momento per questo tipo di messaggio: "Aiutaci a migliorare WiX! Per favore solleva i bug appropriati facendo clic QUI ".
Cheeso

21
Lo farò, @Cheeso! Si prega di segnalare i
Rob Mensching

8
@Cheeso Il concetto chiave da capire è che un progetto WiX Setup crea un pacchetto Windows Installer. I documenti WiX non (e per lo più non dovrebbero) duplicare i documenti di Windows Installer. Sebbene tu possa spesso utilizzare un costrutto WiX senza comprendere le tabelle di Windows Installer che supporta, in caso di domande, dovresti controllare i documenti su MSDN. Per i componenti, inizia qui .
Tom Blodget

30
@ TomBlodget: Direi che WiX DOVREBBE duplicare i documenti di Windows Installer. Per la maggior parte degli utenti, la divisione WiX / Windows Installer causa semplicemente confusione e più può essere nascosto all'utente finale più facile è lo strumento generale da usare.
Scott Stafford

Risposte:


122

Come spiegato da Rob Mensching :

KeyPath per un componente è una singola risorsa utilizzata da Windows Installer per determinare se un componente "esiste" su una macchina.

Ciò significa che quando Windows Installer decide se installare il componente, prima controllerà se la risorsa del percorso chiave è già presente. In caso affermativo, nessuna delle risorse nel componente viene installata.

La presenza della risorsa keypath determina anche se un componente è stato danneggiato o è andato perso quando si "ripara" un MSI.

Quando la risorsa del percorso chiave è un file con versione, Windows Installer la considererà esistente solo se trova un file con una versione uguale o superiore.

Nel tuo esempio specifico, hai un componente che rimuove una cartella durante la disinstallazione. Questo componente verrà installato solo se la chiave di registro specificata non esiste ancora. L'aggiunta di una chiave di registro da utilizzare come percorso chiave è un trucco comune quando è necessario un percorso chiave per un componente che installa risorse che non possono essere utilizzate come percorso chiave, come un collegamento .


4
Allora che senso ha dare esplicitamente all'unico file in un componente un attributo keypath = "no"?
Christopher B. Adkins

4
@ Adkins: ciò sopprimerebbe il comportamento predefinito di wix per prendere quel file come percorso chiave. Di conseguenza, nessun percorso chiave viene scritto nel database del programma di installazione per quel componente. Durante l'installazione, il programma di installazione di Windows utilizzerà quindi la cartella di destinazione del componente come percorso chiave. Un altro modo per ottenere questo comportamento è impostare "keypath = yes" sull'elemento componente stesso. In ogni caso, non mi sembra una buona idea.
Wim Coenen
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.