2009-10-13 13 views

risposta

11

sufficiente creare più componenti che si riferiscono allo stesso file, ma installarlo in posizioni diverse. L'unico risultato è che non è possibile utilizzare due elementi <File Source="somefile"/> che fanno riferimento allo stesso file perché otterranno lo stesso ID generato automaticamente. Fornire esplicitamente agli elementi del file ID diversi per evitare questo problema.

<DirectoryRef Id="directory1"> 
    <Component Id="somefile-component1"> 
     <File Id="somefile-id1" Source="/path/to/somefile"/> 
    </Component> 
</DirectoryRef> 

<DirectoryRef Id="directory2"> 
    <Component Id="somefile-component2"> 
     <File Id="somefile-id2" Source="/path/to/somefile"/> 
    </Component> 
</DirectoryRef> 
+0

sì, ho pensato che avrei potuto kindda farlo, ma ciò è doloroso, significa ID e GUID separati, ecc. ecc. L'altra opzione è CopyFile, ma è necessario gestirne la disinstallazione –

+0

È anche possibile utilizzare gli stessi componenti in più programmi di installazione che definiscono ciascuno il riferimento directory in modo diverso. Ma poi finirai con più file MSI. Vorresti che io approfondissi questo approccio? –

+2

Accetterò questa risposta dato che questo è ciò che ho finito per fare in modo efficace. Non mi piace l'idea di tutta la duplicazione, quindi ho finito per scrivere un programma che ha generato il Wix xml per me e gestito automaticamente la duplicazione. Sembra che Wix sia troppo grezzo e che sia necessario un livello più alto di astrazione per scrivere gli installatori. –

7

Windows Installer ha il proprio concetto per questo chiamato "DuplicateFiles". Funziona solo se i file sono effettivamente identici, ma sembra che sia quello che vuoi. In WIX si implementa questa via l'elemento CopyFile:

http://wix.sourceforge.net/manual-wix2/wix_xsd_copyfile.htm

Non ho effettivamente provato, ma dovrebbe essere simile a questa

<Component Id='Manual' Guid='*' > 
    <File Id='Manual' Name='Manual.pdf' Source='Manual.pdf' KeyPath='yes'> 
    <CopyFile Id='MyDuplicateFile1' DestinationProperty ='DesktopFolder'/> 
    </File> 
</Component> 
+2

Rimuove la copia al momento della disinstallazione? –

+0

Sì, lo fa in realtà - purché il componente che ha eseguito la duplicazione sia stato disinstallato (potrebbe non esserlo se fosse impostato come permanente). –

Problemi correlati