2010-07-23 28 views
5

He creado un Componente con una condición DISABLEMSIUPGRADE, que se establece cuando instalo el MSI usando ExternalUI. Sin embargo, MSI no elimina la entrada en Desinstalar. Creo que el problema es causado por la Condición, pero no puedo solucionarlo.WiX no elimina la clave de registro en la desinstalación

<Component Id="compMSI" Guid="5f18af6a-b839-4b4d-9d4f-79cf7826f749"> 
    <Condition>DISABLEMSIUPGRADE</Condition> 

    <RegistryKey Root="HKLM" Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(var.PGuid)" Action="createAndRemoveOnUninstall"> 
    <RegistryValue Name="DisplayName" Type="string" Value="$(var.ProductTitle)" /> 
    <!-- ... --> 
    </RegistryKey> 
</Component> 

incluso coloqué RemoveRegistryKey elementos en otros componentes para asegurar las claves consigue quitado, sino que también dio hacer el trabajo ...

También probé a almacenar y leer la propiedad DISABLEMSIUPGRADE en la clave.

// edit: Experimenté un poco y descubrí que el elemento CONDITION no es la causa. Parece que si tengo instalada otra versión de mi instalación, la clave de registro no se elimina. ¿Qué podría causar eso?

Respuesta

12

La referencia de Windows Installer cuenta los componentes por su componente/@ Guid. Si tiene un Componente compartido (es decir, Componentes que tienen el mismo @Guid) en los archivos MSI, entonces el contenido del Componente solo se eliminará cuando se desinstalen ambas MSI.

Le recomiendo leer acerca de las Reglas de componentes. Controlan todo esto: http://robmensching.com/blog/posts/2003/10/18/Component-Rules-101

+0

Muchas gracias, funciona como un encanto ahora;). Sin embargo, después de leer su publicación en el blog, pensé que si se recomienda usar siempre un * como guía de componentes? – Simon

+1

Cuando sea posible, recomiendo usar Component/@ Guid = "*". El conjunto de herramientas de WiX te dirá cuándo no puedes. –

1

Si tiene un Componente (recuerde que los Componentes se identifican por su @Guid fuera del archivo MSI) compartido en los Productos, entonces el Componente solo se eliminará cuando se desinstale el último MSI. Una vez más, el Component Rules blog entry que he vinculado anteriormente explica por qué.

Finalmente, un archivo de registro detallado le mostrará el estado de instalación para todos sus componentes.

+0

Muchas gracias por esta información adicional. Nunca encontré estas reglas hasta que publicaste tu enlace. Me pregunto por qué mis otros Componentes han sido eliminados exitosamente todo el tiempo, a pesar de que todos tenían Guías fijas. Sin embargo, he cambiado todas las Guid a * y todo funciona como un amuleto ahora;). – Simon

Cuestiones relacionadas