2011-12-20 13 views
6

Używamy WiX 3.5 do zbudowania instalatora dla jednego z naszych produktów. Dla uproszczenia, załatwiamy uaktualnienia wersji poprzez poważnej modernizacji, tak jak poniżej:WiX - Zachowanie ustawień rejestru dla aktualizacji głównej

<MajorUpgrade AllowSameVersionUpgrades="yes" DowngradeErrorMessage="Laterversionfound" /> 

My nie określając atrybut harmonogram, który oznacza działanie RemoveExistingProducts należy uruchomić po „InstallValidate” - oznacza to pełną odinstalowywania starej wersji odbędzie się przed zainstalowaniem nowej wersji.

Instalujemy niektóre ustawienia rejestru HKLM, które użytkownik musi skonfigurować po instalacji. Ponieważ główna aktualizacja powoduje pełne odinstalowanie, a następnie ponowne zainstalowanie, tracimy ustawienia zdefiniowane przez użytkownika w rejestrze. Najlepiej, gdybyśmy byli w stanie utrzymać je w całej aktualizacji.

My Registry kluczowych komponentów wyglądać następująco:

<Component Id="regserver" Guid="[guid]"> 
    <RegistryValue Root="HKLM" Key="Software\Our Company\Our Product" Name="Server" Value="" Type="string" KeyPath="yes" /> 
</Component> 

Próbowałem ustawiać właściwość NeverOverwrite składników na „tak”, ale to ma niestety efekt braku odtworzyć klucze - prawdopodobnie dlatego, że sprawdza, czy istnieją klucze przed deinstalacja się dzieje (co oczywiście robią), to zostaną one usunięte przy odinstalowaniu, ale nie można ich ponownie utworzyć.

Próbowałem także ustawić atrybut "RemoveFeatures" na element MajorUpgrade, aby usunąć wszystko oprócz kluczy reg. Pozostawia to jednak dwie wersje produktu, ponieważ funkcja zawierająca klucze reg należy do starej wersji.

Następnym krokiem jest próba zaplanowania opcji RemoveExistingProducts w innym miejscu, chociaż oczekuję pewnej ilości bólu przy niektórych naszych niestandardowych działaniach.

Moje pytanie brzmi: czy istnieje sposób na osiągnięcie tego, czego potrzebujemy, bez zmiany miejsca, w którym zaplanowano program RemoveExistingProducts?

+0

Czy jesteś w stanie zmienić oryginalny instalator? Jeśli tak, możesz uczynić składnik rejestru stałym, co oznacza, że ​​nie zostanie on odinstalowany. –

+0

Czy mam rację sądząc, że pozostawiłoby to ustawienia, nawet jeśli produkt został odinstalowany? Idealnie, wolałbym całkowicie odinstalować dla naszych klientów –

Odpowiedz

9

Użyj funkcji wyszukiwania rejestru do załadowania bieżących wartości do właściwości, a następnie użyj [PROPERTY] w RegistryValue, aby zapisać te wartości. Jeśli nie ma zainstalowanego starszego produktu, jego właściwości zostaną zachowane.

+0

Perfect - dzięki Bob –

Powiązane problemy