2009-04-02 10 views
14

voglio affermare che un certo valore Registro di sistema esiste dopo l'installazione, così ho aggiunto il seguente componente:WiX: come impedire la rimozione di un valore di registro durante la disinstallazione?

<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 chiave/valore potrebbe già essere impostato prima dell'installazione. Tuttavia, voglio che il valore sia impostato sul mio valore specifico, cioè che verrà sovrascritto con il mio valore.

Il mio problema è ora che questo valore è sempre rimosso quando il mio prodotto viene disinstallato. Tuttavia, desidero solo rimuovere il valore se è stato aggiunto dal mio programma di installazione. Se il mio installatore ha appena modificato il valore, il valore precedente dovrebbe essere ripristinato (o, se questo non è possibile, il mio valore dovrebbe rimanere intatto).

Si prega di notare che la chiave stessa non viene rimossa durante la disinstallazione. Questo sembra funzionare correttamente perché ho specificato Action="create" sull'elemento RegistryKey.

C'è forse un'impostazione simile per RegistryValue che creerà il valore ma non lo rimuoverà durante l'installazione?

AGGIORNAMENTO: Entrambe le chiavi di registro in HKCR sono impostate a livello di macchina, ovvero provengono dal ramo HKLM \ SOFTWARE \ Classes del registro.

risposta

23

È possibile assicurarsi che il componente sia installato solo quando la voce del Registro di sistema non esiste utilizzando l'attributo NeverOverwrite dello Component element. Dalla documentazione Wix per NeverOverwrite:

Se questo attributo è impostato su 'sì', il programma di installazione non installa o reinstallare il componente se una chiave di file percorso o una voce di chiave di registro percorso per la componente esiste già.

potrebbe anche essere necessario per impostare l'attributo KeyPath sull'elemento Registry-yes per rendere inequivocabile che la voce del Registro è il percorso della chiave componente.

Se si desidera impostare il valore del Registro di sistema anche se esiste già, ma non si desidera rimuoverlo durante la disinstallazione, è possibile utilizzare invece l'attributo Permanent dell'elemento Componente.

+0

Grazie, questo è molto utile. Fammi vedere questo :-) –

+1

+1 per il commento di KeyPath! –

Problemi correlati