2012-04-27 11 views
22

Dopo aver letto this answer sull'approccio "un file per componente" quando si utilizza WiX, ero curioso di scoprire quali sono le migliori pratiche quando si utilizza l'attributo KeyPath su altri elementi tra cui Component, Directory, Registry ecc, eccWix: utilizzo di KeyPath su componenti, directory, file, registro, ecc.

sono interessato a ogni suggerimento generale, ma qui ci sono un paio di domande concrete:

  • Se ho una directory vuota che installatore ha bisogno di creare dovrei set KeyPath="yes" su Directory o su sua madre Component? Cosa succede se è non vuoto?
  • Se un file ha KeyPath="yes" in uno scenario di file per componente, è necessario o una buona pratica impostarlo sul componente principale?
  • Ho letto da qualche parte che invece di impostare KeyPath su un file, uno deve utilizzare una chiave di registro per ogni file e impostare KeyPath="yes" su elemento del Registro di sistema ... È davvero vero/necessario?

Grazie!

Modifica # 1 - Chiarimento Re: Directory

ero consapevole di non avere Directory KeyPath, ma non è stato esplicito/dettagliato nella mia interrogazione. Principalmente, ero curioso dell'uso di KeyPath su un componente quando si deve creare una directory vuota. Vedo che KeyPath = "sì" è in tal caso impostato sul componente principale. Ma è sufficiente per l'installatore rilevare/riparare la cartella vuota mancante? O dovrebbe essere usato insieme alla voce di registro? Esempio Snippet:

<Directory Id="LOGS" Name="Logs"> 
    <Component Id="LogsDir" Guid="*" KeyPath="yes"> 
    <CreateFolder Directory="LOGS" /> 
    </Component> 
</Directory> 

risposta

24

In generale, si dovrebbe basare la decisione sulla idea principale di KeyPath opzione. Da MSDN:

punti questo valore su un file o una cartella appartenente alla componente che il programma di installazione utilizza per rilevare la componente.

Quindi, se si crea un file 1 per componente, non si verificherà la situazione quando si elimina un file accidentalmente e la riparazione non è stata ripristinata. Se si creano N file per componente, si selezionerà comunque uno di essi come KeyPath (e i documenti WiX ti incoraggeranno a farlo esplicitamente) oppure aggiungerai una voce di registro aggiuntiva e lascerai che sia lo KeyPath.

Torna alle vostre domande:

Se ho una directory vuota che installatore ha bisogno di creare dovrei impostare KeyPath = "sì" Directory o

Directory elemento non ha un attributo KeyPath.

se un file è KeyPath = "yes" in uno scenario di file-per-componente, vero pratica necessaria o buono per impostare sul suo genitore componente?

No, in fondo, questo non ha senso. Se lo Component dispone di KeyPath="yes", la directory in cui è installato questo componente diventa un percorso chiave. Quando lo si imposta su un File in modo esplicito, quindi ovviamente il file è un percorso chiave.

Ho letto da qualche parte che invece di impostare KeyPath su un file, si dovrebbe usare una chiave del Registro di sistema per ogni file e impostare KeyPath = "sì" Registro elemento ... è proprio vero/necessario?

Questo suona come una sciocchezza. Ancora una volta, basarsi sulla necessità generale di KeyPath - rilevare il componente. Perché è necessaria una voce di registro aggiuntiva per rilevare se un file è presente in un file system? Potrebbe avere senso per N scenari per componente, quando si crea 1 voce di registro per componente (ovvero N file) e si lascia che Windows Installer giudichi in base a quella voce di registro, indipendentemente dal fatto che il componente sia considerato "non danneggiato".

UPDATE: non è necessario introdurre una voce del Registro di sistema solo per fungere da percorso chiave per aiutare il programma di installazione a tenere traccia di una cartella vuota. È sufficiente aggiungere KeyPath='yes' al componente principale.

Non complicare le cose. Windows Installer è abbastanza complesso come è. :) Spero che questo aiuti.

+9

C'è un caso in cui si utilizza una voce di registro aggiuntiva poiché si consiglia il percorso chiave: quando si dispone di un componente che non contiene alcuna altra risorsa che può fungere da un keypath. L'esempio tipico è un componente che installa un collegamento. –

+0

@WimCoenen, grazie, questa è una nota preziosa! –

+0

@Yan Sklyarenko Grazie per la risposta dettagliata. Sapevo che Directory non ha KeyPath, ma ho aggiornato la mia domanda per chiarire il contesto in cui era correlato a KeyPath. A proposito, hai ragione quando dici che Win Installer è complesso, e il mio obiettivo era assicurarmi che non complicassi le mie installazioni. Ecco perché ho fatto la domanda :) Il tutorial su WiX è abbastanza buono, ma non sono riuscito a trovare una fonte di "buone pratiche" che includesse suggerimenti utili (come ad esempio un Wim Coenen pubblicato nel suo commento) – zam6ak

Problemi correlati