2009-09-10 1 views
19

Quando è necessario modificare o non modificare il GUID del componente in WIX?The Microsoft SDK information is confusing.Modificare il mio componente GUID in wix?

Glytzhkof edit: Per chiarire, la domanda riguarda quando un componente GUID deve essere modificato per un componente MSI. Un componente può cambiare con aspetti quali: percorso di destinazione modificato, aggiunta o rimozione di file da/allo stesso componente, aggiunta di dati di registro ecc ... Ciò causa problemi con il cosiddetto riferimento ai componenti, ovvero lo best practice for creating components in MSI .

+1

Potresti aggiungere più dettagli alla tua domanda? Non sono esattamente sicuro di cosa stai chiedendo. –

risposta

37

Il concetto generale di MSI è che c'è un mappatura 1: 1 tra un GUID componente (identificativo univoco) e un percorso assoluto (percorso di installazione/percorso della chiave). Il percorso completo, incluso il nome del file, se presente. Vedi l'aggiornamento qui sotto per una nuova funzione Wix per gestire auto magicamente con questo.

Faccio uso di alcune semplici regole a che fare con le regole dei componenti eccessivamente complesse e prive di senso:

  • Usare sempre un componente separato per file (anche per i non-binari). Questo evita ogni tipo di problema. Ci sono alcune eccezioni:
    • multi-file assembly .NET dovrebbero essere tutti in un componente in quanto essi devono sempre essere installati/disinstallati come una singola unità.
    • Alcuni altri tipi di file generali sono disponibili in "coppie corrispondenti" - appartengono insieme. Spesso questi sono file di contenuto e indice. Ad esempio, considera i file della guida di Microsoft:
      • . I file HLP e .CNT appartengono insieme.
      • . I file CHM e .CHI appartengono insieme.
    • Probabilmente molti di questi tipi di file appartengono insieme e dovrebbero quindi essere inseriti nello stesso componente in modo che vengano installati/disinstallati insieme - sospetto che alcuni file di certificati siano candidati. È difficile trovare una lista definitiva. Basta chiedere a te stesso "fa sì che questi file appartengano sempre" - così vengono sempre visualizzati in coppia ogni volta che c'è una nuova versione? Se sì, quindi installarli tramite lo stesso componente. Imposta il file con versione, se esiste, come file chiave.
  • Ricordare che una volta assegnato un GUID per un componente, viene impostato su pietra per il percorso chiave di quel componente (percorso assoluto). Se spostate il file in una nuova posizione o rinominate il file, dategli un nuovo GUID del componente (poiché il percorso assoluto è diverso è effettivamente una nuova identità).
  • Nel componente di riepilogo i GUID sono legati a un percorso di installazione assoluto e non a un file specifico. Il GUID non segue il file in giro se si sposta. Il riferimento GUID conta una posizione assoluta, non il file di per sé.
  • Non aggiungere o rimuovere file da un componente esistente. Ne derivano tutti i tipi di problemi di aggiornamento e patch. Questo è il motivo per cui mi piace un file per componente come regola generale.
  • C'è molto di più nel riferimento ai componenti, ma lo lascerò a quello per una "panoramica".

Alcuni esempi:

  • si rinomina il file C: \ Program Files \ MyCompany \ MyApp \ MyFile.exe a C: \ Program Files \ MyCompany \ MyApp \ MyFile_NEW.exe . Cosa significa questo per la creazione di componenti? Questo è un nuovo percorso di installazione assoluto, quindi generi un nuovo GUID per il componente di hosting, OPPURE aggiungi un nuovo componente ed elimini quello vecchio (che ha lo stesso effetto).
  • L'MSI aggiornato offre una nuova versione di MyFile.exe. La posizione è la stessa di prima, questo significa che il componente GUID non dovrebbe cambiare. È lo stesso file (identità), solo in una versione diversa.

UPDATE: WIX ha ora una nuova funzionalità che auto-generate component GUIDcalculates a GUID finché il percorso di destinazione rimane lo stesso. Non ho provato questo per essere onesti, ma molti sembrano usarlo senza problemi, e Rob Mensching (Wix author) states it is safe for normal use. Come concetto, lo consiglio vivamente poiché presenta alcune funzioni di auto-magia e ti protegge da una certa complessità.

Si noti inoltre che you can leave out a lot of source attributes from your Wix xml file e si basano sui valori predefiniti di Wix invece dei valori di codifica rigida.

+1

La risposta più grande che abbia mai letto. Sei forte!! – Rohit

+3

La parte relativa a "percorso assoluto" non è esattamente vera. È possibile installare lo stesso componente (stesso GUID) in diverse directory e il conteggio dei riferimenti funziona correttamente. Gli elenchi mettono una ruga nella semplicità delle dichiarazioni di cui sopra. –

+1

Dopo il costo dei file e la risoluzione della tabella di directory con le relative proprietà della directory e dopo che l'utente ha (forse) selezionato una directory di installazione, i GUID del componente punteranno ai percorsi di chiave assoluti? Penso che il modo più semplice per guardare questo è quello di concentrarsi sulla cartella di origine - se si sposta un file nella cartella di origine si modifica il GUID. La posizione di installazione effettiva è una "destinazione mobile" fino al punto in cui vengono risolte le directory, ma si finisce sempre con un percorso assoluto come percorso chiave per ogni componente installato, per quanto ne so? –

0

Dai uno sguardo allo WiX Tutorial, The Files Inside, per una spiegazione dettagliata sulle regole del componente. Fondamentalmente, si dice che non si modifica mai il GUID di un componente, poiché ciò significa rendere orfano il vecchio componente e creare un nuovo componente.

+0

Il collegamento è utile, ma la risposta non è molto utile per decidere cosa leggere lì (non tutte le persone hanno molto tempo). Suggerirei almeno di aggiungere una citazione dall'articolo, qualcosa come * '[...], un componente dovrebbe contenere solo elementi che appartengono insieme così fortemente da dover sempre essere installati o rimossi insieme. Se questo significa un singolo file, i tuoi componenti conterranno un singolo file ciascuno. Questo non è solo normale ma esattamente quello che ci si aspetta che faccia. Non temere, Windows Installer può gestire in modo efficiente migliaia di componenti o più, se necessario. * – Wolf

15

Non si modifica mai Component/@ Guid. Inoltre, non si modifica mai il set di risorse (File, RegistryKey, Shortcut, TypeLib, ecc.) Nel componente. Quando hai una nuova risorsa, devi creare un nuovo componente con una nuova @guida. La parte davvero difficile è che il nuovo Component non può sovrapporsi (pensa al percorso del file, o al percorso della chiave del registro, o alla typelib, ecc.) Con il vecchio Component.

Queste sono fondamentalmente le Regole componenti, verificare: http://robmensching.com/blog/posts/2003/10/18/Component-Rules-101.

+0

Il percorso di installazione del componente ha effetto? – Rohit

+1

Sì e no. :) Se si modifica la Component/@ Directory, non è necessario * avere * per modificare Component/@ Guid, ma è possibile se lo si desidera ... finché non ci sono altre risorse nel Componente (come le chiavi del Registro di sistema). Se ci sono altre risorse nel componente e si cambia guida, allora tutte le risorse necessitano di un nuovo nome o percorso. La nuova posizione si prenderà cura dei file, ovviamente. No, le regole dei componenti non sono semplici. –

+0

@RobMensching. Cosa succede se usiamo l'opzione -ag con Heat? Come sappiamo, rende la generazione di ComponentIds al tempo di collegamento sulla base dello scenario definito da Glytzhkof nella risposta sopra. –