2012-11-22 13 views
12

Buduję instalator perMachine przy użyciu WiX 3.6, aby zainstalować oprogramowanie, którego nie opracowałem. Niestety program tworzy pewne klucze rejestru w HKCU podczas wykonywania.Usuwanie kluczy rejestrów w HKCU za pomocą instalacji na komputerze

Po odinstalowaniu, samodzielnie utworzone klucze również powinny zostać usunięte. Wydaje się nie tak łatwo usunąć te klucze. "Walczę" z ICE57 i/lub ICE38. Oba narzekają na połączenie danych perUser i perMachine.

Mam nadzieję, że możesz wskazać mi właściwy kierunek naprawy tego problemu.

Odpowiedz

9

Aby przezwyciężyć ICES należy przenieść każdego użytkownika rejestru w celu oddzielenia składników i używać wpis rejestru jako keypath dla tego składnika, tj:

<Component Id='PerUserRegistry' Guid='*'> 
    <RegistryValue Id="PerUserRegistry_KeyPAth" KeyPath="yes" Root="HKCU" Key="Software\[Manufacturer]\[ProductName]\[ProductCode]\PerUserRegistry" Name="[PackageCode]" Value="[ProductVersion]" Type="string" /> 
    <!--Other Per-user registry goes here--> 
</Component> 

I całkowicie zgadzam się z Christopherem: Powszechną praktyką jest, aby pozostawić za - dane użytkownika dotyczące deinstalacji, ale jeśli usunięcie jest konieczne, aktywna konfiguracja jest jedyną realną opcją.

Najpierw proponuję, aby usunąć je zainstalować lub ponownie zainstalować zamiast deinstalacji, wystarczy dodać wpis RemoveRegirty i Active Setup, czyli z tego kodu WiX:

<Component Id='ActiveSetup' Guid='*'> 
    <RegistryValue Id="ActiveSetup00" Root="HKLM" KeyPath="yes" Key="SOFTWARE\SOFTWARE\Microsoft\Active Setup\Installed Components\[PackageCode]\" Name="StubPath" Value="msiexec /fup [ProductCode] /qb-!" Type="string" /> 
    <RegistryValue Id="ActiveSetup01" Root="HKLM" Key="SOFTWARE\SOFTWARE\Microsoft\Active Setup\Installed Components\[PackageCode]\" Value="[ProductName] [ProductVerion] Configuration" Type="string" /> 
</Component> 
<Component Id='PerUserRegistryCleanup' Guid='*'> 
    <RegistryValue Id="PerUserRegistry_KeyPath" Root="HKCU" KeyPath="yes" Key="SOFTWARE\SOFTWARE\Microsoft\Active Setup\Installed Components\[PackageCode]\" Name="StubPath" Value="msiexec /fup [ProductCode] /qb-!" Type="string" /> 
    <RemoveRegistryKey Id='PerUserRegCleanup' Root='HKCU' Action='removeOnInstall' Key='Key\To\Be\Removed'/> 
</Component> 

Uwaga: [PackageCode] Zastosowanie w ActiveSetup jest bardzo zalecane, więc przy każdej nowej wersji (kompilacji) pakietu MSI dodajesz osobny wpis (zobacz także moją notatkę końcową). Użyłem aktywnego rejestru instalacji użytkownika jako ścieżki klucza, więc nie uruchamiaj go dla bieżącego użytkownika dwukrotnie.

Co do usuwania ich po odinstalowaniu, Teraz, mam nadzieję, że trzeba usunąć cały klucz, a nie tylko niektóre wartości. W obu przypadkach utworzę niestandardową akcję, aby dodać wpis rejestru dla Instalacji aktywnej podczas deinstalacji (lub jeśli istnieje wiele takich kluczy/wartości, utwórz i zainstaluj plik .CMD wraz z tymi i uruchom go po odinstalowaniu, przed operacją RemoveFiles, aby dodać wszystkie z nich do rejestru).

Uwaga: zdecydowanie zaleciłabym dodanie usunięcia tego rejestru podczas instalacji, lub może się zdarzyć, że usunie się wartości dla poszczególnych użytkowników, gdy oprogramowanie zostanie zainstalowane.

Więc oto kod WiX za to wszystko:

<CustomAction Id="CA_UninstallRegistryCleanUp" Directory="SystemFolder" ExeCommand="REG.exe ADD &quot;HKLM\SOFTWARE\Microsoft\Active Setup\Installed Components\MySoftName_CleanUp&quot; /v StubPath /d &quot;reg add ^&quot;HKCU\Key\To\Be\Removed^&quot; /va /f&quot; /f" Return="ignore" /> 
<InstallExecuteSequence> 
    <Custom Action='CA_UninstallRegistryCleanUp' After='RemoveRegistryValues'>REMOVE~="ALL"</Custom> 
</InstallExecuteSequence> 

<Component Id='RegCleanup_Remover' Guid='*'> 
    <RegistryValue Id="PerUserRegistry_KeyPAth" Root="HKLM" KeyPath="yes" Key="SOFTWARE\[Manufacturer]\[ProductName]\[ProductCode]\" Name="DummyKey" Value="[ProductVersion]" Type="string" /> 
    <RemoveRegistryKey Id='RegCleanup_Remover' Root='HKLM' Action='removeOnInstall' Key='SOFTWARE\Microsoft\Active Setup\Installed Components\MySoftName_CleanUp'/> 
</Component> 

Uwagi końcowe: tam tylko dwa małe problemy z tym wszystkim aktywnym rzeczy konfiguracji: uważać na serwerach Windows Terminal; i po uruchomieniu aktywnej konfiguracji dla jednego użytkownika dla bieżącego .MSI, nie będzie on uruchamiany ponownie, jeśli zdecydujesz się na ponowną instalację tego samego pakietu, chyba że zmienisz jego PackageConde lub podniosę wersję w kluczu rejestru ActiveSetup. To są tematy na inny dzień, daj mi znać, jeśli ich potrzebujesz, wyjaśnione.

Nie zapomnij dodać wszystkich powyższych komponentów do niektórych funkcji.

1

Instalator systemu Windows bierze pod uwagę te dane użytkownika, a najlepszą praktyką jest, aby go nie usuwać. Tak czy inaczej, bardzo trudno jest spróbować usunąć go tak czy inaczej, ponieważ inne profile użytkowników są poza zakresem/kontekstem. Jest teoretycznie możliwe wpisanie niestandardowej akcji w celu wyliczenia profili i załadowania gałęzi rejestru, ale w niektórych wersjach systemu Windows (Vista), które nie będą działać z powodu ograniczonych uprawnień przyznanych usłudze instalatora systemu Windows.

Jeśli naprawdę musi być w stanie usunąć dane niestandardowe działania na deinstalacji następnie przyjrzeć:

Active Setup Explained

Będziesz musiał zostawić programu (exe na przykład) przez oznaczenie elementu jako stałego. Następnie będziesz potrzebował niestandardowej akcji, aby zapisać wartość rejestru podczas deinstalacji (ponieważ Instalator Windows nie obsługuje tego).

Koncept polega na tym, że instalujesz plik EXE i podczas odinstalowywania pozostawiasz go. Następnie należy napisać do klucza rejestru ActiveSetup, informując go o uruchomieniu pliku EXE raz dla każdego kolejnego użytkownika, aby zalogować się do komputera. EXE usuwa wartości rejestru. Zrestartuj (grzecznie), jeśli będzie to konieczne, aby usunąć rozszerzenia z eksploratora.

Ale szczerze mówiąc, lepiej zaprojektowana aplikacja nie potrzebowałaby tego wszystkiego.

+0

Klucze rejestru rozszerzające menu kontekstowe eksploratora. Nieusunięcie go spowoduje opuszczenie menu. –

+0

Dlaczego został rozszerzony na użytkownika, a nie na maszynę? –

+0

Zaktualizowana odpowiedź na odwołanie do hackowania –

Powiązane problemy