Pytanie WiX: Jak zapobiec usunięciu wartości rejestru podczas deinstalacji?


Chcę potwierdzić, że pewna wartość rejestru istnieje po instalacji, więc dodałem następujący komponent:

<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>

Klucz / wartość może już być ustawiony przed instalacją. Jednak chcę, aby wartość została ustawiona na moją określoną wartość, tj. Zostanie ona nadpisana moją wartością.

Mój problem polega na tym, że ta wartość jest zawsze usunięte po odinstalowaniu mojego produktu. Jednak chcę tylko, aby wartość została usunięta, jeśli została dodana przez mój instalator. Jeśli mój instalator właśnie zmodyfikował wartość, poprzednia wartość powinna zostać przywrócona (lub, jeśli nie jest to możliwe, moja wartość powinna pozostać nietknięta).

Pamiętaj, że sam klucz nie jest usuwany po odinstalowaniu. Wygląda na to, że działa poprawnie, ponieważ określiłem Action="create" na RegistryKey element.

Czy jest możliwe podobne ustawienie dla RegistryValue który utworzy wartość, ale nie usunie jej podczas instalacji?

AKTUALIZACJA: Oba klucze rejestru w HKCR są ustawieniami dla całego komputera, tj. Pochodzą z gałęzi rejestru HKLM \ SOFTWARE \ Classes.


14
2018-04-02 13:17


pochodzenie




Odpowiedzi:


Możesz upewnić się, że twój komponent jest zainstalowany tylko wtedy, gdy wpis rejestru nie istnieje, korzystając z NeverOverwrite atrybut Element składowy. Z dokumentacji wix dla NeverOverwrite:

Jeśli ten atrybut jest ustawiony na "tak", to   instalator nie instaluje ani   ponownie zainstaluj komponent, jeśli ścieżka klucza   plik lub wpis rejestru ścieżki klucza dla   składnik już istnieje.

Może być również konieczne ustawienie opcji KeyPath atrybut na Rejestr element do yes aby jednoznacznie stwierdzić, że wpis rejestru jest ścieżką klucza komponentu.

Jeśli chcesz ustawić wartość rejestru, nawet jeśli już istnieje, ale nie chcesz jej usuwać po odinstalowaniu, możesz użyć Permanent atrybut elementu Component zamiast.


24
2018-04-02 15:00