2009-10-13 9 views

Respuesta

11

simplemente crean múltiples componentes que hacen referencia al mismo archivo, pero instálelo en diferentes ubicaciones. El único problema es que no se pueden usar dos elementos <File Source="somefile"/> que hagan referencia al mismo archivo porque obtendrán el mismo ID autogenerado. Proporcione explícitamente a los elementos de archivo diferentes ID para evitar ese 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í, Kindda pensé que podría hacer eso, pero eso es doloroso, significa identificaciones y GUID separados, etc. etc. La otra opción es CopyFile, parece, pero luego tiene que manejar la desinstalación de ellos –

+0

También podría usar los mismos componentes en varios instaladores que cada uno define el referenciado directorio de manera diferente. Pero luego terminarás con múltiples archivos MSI. ¿Le gustaría que me explayera sobre ese enfoque? –

+2

Aceptaré esta respuesta ya que esto fue lo que terminé haciendo efectivamente. No me gusta la idea de toda la duplicación, así que terminé escribiendo un programa que generó el Wix xml para mí y manejó automáticamente la duplicación. Se siente como wix demasiado crudo y se necesita un mayor nivel de abstracción para escribir instaladores. –

7

Windows Installer tiene su propio concepto para esto llamado "DuplicateFiles". Solo funciona si los archivos son realmente idénticos, pero parece que eso es lo que quieres. En WIX decide implementar esta forma a través del elemento CopyFile:

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

que en realidad no lo he probado, pero debe ser algo como esto

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

¿Esto elimina la copia en la desinstalación? –

+0

Sí, de hecho lo hace, siempre y cuando el componente que realizó la duplicación se haya desinstalado (podría no serlo si se hubiera configurado como permanente). –

Cuestiones relacionadas