WiX: ¿Cómo prevenir un valor de registro de ser eliminado en la desinstalación?

StackOverflow https://stackoverflow.com/questions/709661

  •  22-08-2019
  •  | 
  •  

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

.
¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top