2012-01-19 31 views
6

Hola, estoy instalando archivos en un directorio usando WIX con el siguiente código.WIX instalando archivos, sobrescribe

<Directory Id="CMSICONSDIR" Name="CMSIcons"> 
    <Component Id="CMSICONSDIR_C" Guid="B0328FBF-D9F7-4278-B16C-28650016FF86" SharedDllRefCount="no" KeyPath="no" NeverOverwrite="no" Permanent="no" Transitive="no" Location="either"> 
     <CreateFolder/> 
     <File Id="AddCamera.png" Name="AddCamera.png" DiskId="1" Source="..\..\OrionVEWorld\bin\Release\CMSICons\AddCamera.png" KeyPath="no" /> 
     <File Id="aldownloadsmall.png" Name="al-download-small.png" DiskId="1" Source="..\..\OrionVEWorld\bin\Release\CMSICons\al-download-small.png" KeyPath="no" /> 

El modo en que funciona mi aplicación es que un usuario puede copiar sus propios archivos en ese directorio anulando con lo que prefiera.

El problema es que cuando hago mi próxima instalación para una actualización, reemplaza esos archivos con los archivos estipulados en la instalación.

¿Cómo me aseguro de que cuando ejecuto mi instalación no anule los archivos existentes que están allí y solo agrega otros nuevos?

Desafortunadamente en otro caso necesito archivos que anulen lo que está allí.

tengo una sección de comandos de actualización que pueden afectar a este como a continuación

<Upgrade Id="$(var.UpgradeCode)"> 
    <UpgradeVersion Minimum="$(var.ProductVersion)" OnlyDetect="no" Property="NEWERVERSIONDETECTED"/> 
    <UpgradeVersion Minimum="1.0.0.0" 
        IncludeMinimum="yes" 
        OnlyDetect="no" 
        Maximum="$(var.ProductVersion)" 
        IncludeMaximum="no" 
        Property="PREVIOUSVERSIONSINSTALLED" /> 
</Upgrade> 

Cualquier sugerencia se aprecia.

Respuesta

5

Puede intentar cambiar el orden de actualización modificando la secuencia de la acción RemoveExistingProducts. Puede colocarlo después de InstallFinalize (opción no 4 en el artículo de enlace).

También el artículo this explica cómo el instalador de Windows maneja toda la lógica de sobrescritura de archivos.

EDITAR: También agregue el atributo "Nunca sobrescribir" a los componentes.

+0

Hecho y no NeverOverwrite = "sí" Permanente = "sí" en mi componente y todavía sobrescribe los archivos anteriores . No estoy seguro de lo que estoy haciendo mal – TheWommies

2

Intente agregar el atributo NeverOverwrite a sus componentes. Debería hacer el truco.

+0

Esto no es suficiente si la acción RemoveExistingProducts es anterior a InstallExecute. – Ciprian

+0

@Ciprian - ¿No WIX planifica la acción RemoveExistingProducts después de InstallExecute de forma predeterminada? – imagi

+0

Puede que tengas razón en esto. No tengo un amplio conocimiento sobre WIX. – Ciprian