2009-04-02 14 views
14

Quiero afirmar que un determinado valor de registro existe después de la instalación, por lo que añade los siguientes componentes:WiX: ¿Cómo evitar que se elimine un valor de registro en la desinstalación?

<Component Id="RegistryEntryContextMenuOdt" Guid="4BA5BA24-4F65-4BDF-99EB-CB4B947F31A9" DiskId="1" KeyPath="yes"> 
    <RegistryKey Id="RegKeyOdt" Root="HKCR" Action="create" Key=".odt"> 
     <RegistryValue Type="string" Value="openDocument.WriterDocument.1" /> 
    </RegistryKey> 
</Component> 

La clave/valor que ya se pudo fijar antes de la instalación. Sin embargo, quiero que el valor se establezca en mi valor específico, es decir, que se sobrescribirá con mi valor.

Mi problema ahora es que este valor es siempre eliminado cuando se desinstala mi producto. Sin embargo, solo quiero que se elimine el valor si mi instalador lo agregó. Si mi instalador acaba de modificar el valor, se debe restaurar el valor anterior (o, si esto no es posible, mi valor debe permanecer intacto).

Tenga en cuenta que la clave no se elimina en la desinstalación. Esto parece funcionar correctamente porque especifiqué Action="create" en el elemento RegistryKey.

¿Existe una configuración similar para RegistryValue que creará el valor pero no lo eliminará en la instalación?

ACTUALIZACIÓN: Ambas claves de registro en HKCR son settinge en toda la máquina, es decir, se originan en la rama HKLM \ SOFTWARE \ Classes del registro.

Respuesta

23

Puede asegurarse de que su componente solo se instale cuando la entrada de registro no existe haciendo uso del atributo NeverOverwrite del Component element. De la documentación Wix para NeverOverwrite:

Si este atributo se establece en 'sí', la instalador no instala ni vuelva a instalar el componente si una clave de archivo de ruta o una entrada en el registro ruta clave para el componente ya existe.

También puede ser necesario para establecer el atributo KeyPath en el elemento Registry a yes para que sea inequívoco de que la entrada del registro es la ruta de la clave de componentes.

Si desea establecer el valor de registro incluso si ya existe, pero no desea eliminarlo en la desinstalación, puede utilizar el atributo Permanent del elemento Componente en su lugar.

+0

Gracias, esto es muy útil. Déjame ver esto :-) –

+1

+1 para el comentario de KeyPath! –

Cuestiones relacionadas