WiX: ¿Cómo prevenir un valor de registro de ser eliminado en la desinstalación?
Pregunta
Quiero afirmar que un determinado valor de registro existe después de la instalación, por lo que añade los siguientes componentes:
<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 establece en mi valor específico, es decir, que se sobrescribe con mi valor.
Mi problema ahora es que este valor es siempre eliminado cuando mi producto se desinstala. Sin embargo, sólo quiero que el valor que se debe eliminar si se añadió a mi instalador. Si mi instalador acaba de modificar el valor, el valor anterior se debe restaurar (o, si esto no es posible, mi valor debe permanecer intacta).
Tenga en cuenta que la clave no se elimina durante la desinstalación. Esto parece funcionar correctamente, porque he especificado en el elemento Action="create"
RegistryKey
.
¿Hay tal vez un ajuste similar para RegistryValue
que creará el valor, pero no eliminarlo en la instalación?
ACTUALIZACIÓN: Tanto claves de registro previstos en HKCR son settinge máquina de ancho, es decir, que se originan en el HKLM \ SOFTWARE \ Classes rama del registro
.Solución
Puede asegurarse de que su componente sólo se instala cuando la entrada del registro no existe, haciendo uso del atributo NeverOverwrite
de la Componente elemento . 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 ruta de la clave archivo o una entrada del registro de ruta de la clave el componente ya existe.
También puede ser necesario para establecer el atributo KeyPath
el elemento de la Registro a yes
para que sea inequívoco de que la entrada del registro es la ruta de la clave componente.
Si desea establecer el valor de registro, incluso si ya existe, pero que no desea eliminarlo de desinstalación, a continuación, puede utilizar el atributo Permanent
del elemento componente en su lugar.