Problemy z programami opartymi o Instalator Windows (.MSI)


Instalator Windows (Windows Installer) to program wbudowany w system Windows, który pozwala instalować, modyfikować i usuwać inne programy oparte o ten mechanizm. Polecany przez Microsoft jako najlepszy szkielet instalacyjny do budowy instalatorów. Pomimo zalet instalatory takie mogą sprawiać pewne problemy.

Diagnostyka i naprawa aparatu Instalator Windows

Podstawą działania mechanizmu jest obecność w systemie najnowszej wersji Instalatora Windows oraz aktywna usługa Instalator Windows.

1. Sprawdzamy działanie i wersję Instalatora Windows
W tym celu uruchamiamy wiersz polecenia i wpisujemy polecenie „msiexec”. Jeżeli coś jest nie tak, wyświetlone zostaną informacje o błędach. Standardowy powinno wyświetlić się okienko z informacją o wersji oraz sposobach użycia. Podstawowy plik znajduje się w lokalizacji „C:\Windows\System32\msiexec.exe”.
Jeżeli wersja jest inna niż 4.5 (tylko Windows XP, Vista i Server 2003/2008; Windows 7 jest wyposażony w wersje 5.0), pobieramy i aktualizujemy do najnowszej wersji.
instalator windows wersja

2. Sprawdzamy stan usługi Instalator Windows
Uruchamiamy przystawkę Usługi. Ustawiamy typ uruchamiania na Ręczny. Następnie uruchamiamy usługę, która powinna się bez problemów uruchomić.

Wyłączenie usługi powoduje błąd podczas instalacji lub usuwania programów: „Nie można uzyskać dostępu do usługi Instalator Windows”.

instalator windows błąd

3. Ponowna rejestracja /instalacja (tylko Windows XP / 2000)
W wiersz polecenia wpisujemy kolejno:

MSIExec /unregister
MSIExec /regserver

Można także wykonać to w trybie awaryjnym, gdy nie działa normalnie.

Jeżeli nie pomoże ponowna rejestracja możemy przeinstalować cały instalator. Wcześniej musimy zmienić nazwy uszkodzonych plików. W wiersz polecenia wpisujemy kolejno komendy lub tworzymy automatyczny plik wsadowy:

cd %windir%\system32
attrib -r -s -h dllcache
ren msi.dll msi.old
ren msiexec.exe msiexec.old
ren msihnd.dll msihnd.old
cd %systemroot%\system32\dllcache
ren msi.dll msi.old
ren msiexec.exe msiexec.old
ren msihnd.dll msihnd.old

Następnie ponownie uruchamiamy komputer i instalujemy Instalator Windows.

4. Weryfikacja ścieżki dostępu do instalatora w rejestrze
W kluczu HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSIServer
wartość ImagePath ma być ustawiona na

C:\WINDOWS\System32\msiexec.exe /V

5. Rekonstrukcja usługi w rejestrze (tylko Windows Vista/7)
Przygotowujemy plik rejestru z rozszerzeniem .reg i dodajemy informacje do rejestru (gotowy plik: win-installer-fix.zip:

Windows Registry Editor Version 5.00

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\msiserver]
„DisplayName”=”@%SystemRoot%\\system32\\msimsg.dll,-27”
„ImagePath”=hex(2):25,00,73,00,79,00,73,00,74,00,65,00,6d,00,72,00,6f,00,6f,00,\
74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,6d,\
00,73,00,69,00,65,00,78,00,65,00,63,00,20,00,2f,00,56,00,00,00
„Description”=”@%SystemRoot%\\system32\\msimsg.dll,-32”
„ObjectName”=”LocalSystem”
„ErrorControl”=dword:00000001
„Start”=dword:00000003
„Type”=dword:00000010
„DependOnService”=hex(7):72,00,70,00,63,00,73,00,73,00,00,00,00,00
„ServiceSidType”=dword:00000001
„RequiredPrivileges”=hex(7):53,00,65,00,54,00,63,00,62,00,50,00,72,00,69,00,76,\
00,69,00,6c,00,65,00,67,00,65,00,00,00,53,00,65,00,43,00,72,00,65,00,61,00,\
74,00,65,00,50,00,61,00,67,00,65,00,66,00,69,00,6c,00,65,00,50,00,72,00,69,\
00,76,00,69,00,6c,00,65,00,67,00,65,00,00,00,53,00,65,00,4c,00,6f,00,63,00,\
6b,00,4d,00,65,00,6d,00,6f,00,72,00,79,00,50,00,72,00,69,00,76,00,69,00,6c,\
00,65,00,67,00,65,00,00,00,53,00,65,00,49,00,6e,00,63,00,72,00,65,00,61,00,\
73,00,65,00,42,00,61,00,73,00,65,00,50,00,72,00,69,00,6f,00,72,00,69,00,74,\
00,79,00,50,00,72,00,69,00,76,00,69,00,6c,00,65,00,67,00,65,00,00,00,53,00,\
65,00,43,00,72,00,65,00,61,00,74,00,65,00,50,00,65,00,72,00,6d,00,61,00,6e,\
00,65,00,6e,00,74,00,50,00,72,00,69,00,76,00,69,00,6c,00,65,00,67,00,65,00,\
00,00,53,00,65,00,41,00,75,00,64,00,69,00,74,00,50,00,72,00,69,00,76,00,69,\
00,6c,00,65,00,67,00,65,00,00,00,53,00,65,00,53,00,65,00,63,00,75,00,72,00,\
69,00,74,00,79,00,50,00,72,00,69,00,76,00,69,00,6c,00,65,00,67,00,65,00,00,\
00,53,00,65,00,43,00,68,00,61,00,6e,00,67,00,65,00,4e,00,6f,00,74,00,69,00,\
66,00,79,00,50,00,72,00,69,00,76,00,69,00,6c,00,65,00,67,00,65,00,00,00,53,\
00,65,00,50,00,72,00,6f,00,66,00,69,00,6c,00,65,00,53,00,69,00,6e,00,67,00,\
6c,00,65,00,50,00,72,00,6f,00,63,00,65,00,73,00,73,00,50,00,72,00,69,00,76,\
00,69,00,6c,00,65,00,67,00,65,00,00,00,53,00,65,00,49,00,6d,00,70,00,65,00,\
72,00,73,00,6f,00,6e,00,61,00,74,00,65,00,50,00,72,00,69,00,76,00,69,00,6c,\
00,65,00,67,00,65,00,00,00,53,00,65,00,43,00,72,00,65,00,61,00,74,00,65,00,\
47,00,6c,00,6f,00,62,00,61,00,6c,00,50,00,72,00,69,00,76,00,69,00,6c,00,65,\
00,67,00,65,00,00,00,53,00,65,00,41,00,73,00,73,00,69,00,67,00,6e,00,50,00,\
72,00,69,00,6d,00,61,00,72,00,79,00,54,00,6f,00,6b,00,65,00,6e,00,50,00,72,\
00,69,00,76,00,69,00,6c,00,65,00,67,00,65,00,00,00,53,00,65,00,52,00,65,00,\
73,00,74,00,6f,00,72,00,65,00,50,00,72,00,69,00,76,00,69,00,6c,00,65,00,67,\
00,65,00,00,00,53,00,65,00,49,00,6e,00,63,00,72,00,65,00,61,00,73,00,65,00,\
51,00,75,00,6f,00,74,00,61,00,50,00,72,00,69,00,76,00,69,00,6c,00,65,00,67,\
00,65,00,00,00,53,00,65,00,53,00,68,00,75,00,74,00,64,00,6f,00,77,00,6e,00,\
50,00,72,00,69,00,76,00,69,00,6c,00,65,00,67,00,65,00,00,00,53,00,65,00,54,\
00,61,00,6b,00,65,00,4f,00,77,00,6e,00,65,00,72,00,73,00,68,00,69,00,70,00,\
50,00,72,00,69,00,76,00,69,00,6c,00,65,00,67,00,65,00,00,00,53,00,65,00,4c,\
00,6f,00,61,00,64,00,44,00,72,00,69,00,76,00,65,00,72,00,50,00,72,00,69,00,\
76,00,69,00,6c,00,65,00,67,00,65,00,00,00,00,00
„FailureActions”=hex:84,03,00,00,00,00,00,00,00,00,00,00,03,00,00,00,14,00,00,\
00,01,00,00,00,c0,d4,01,00,01,00,00,00,e0,93,04,00,00,00,00,00,00,00,00,00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\msiserver\Enum]
„0”=”Root\\LEGACY_MSISERVER\\0000″
„Count”=dword:00000001
„NextInstance”=dword:00000001

Folder C:\Windows\Installer

Programy zbudowane w oparciu o Instalator Windows są dystrybuowane w postaci plików instalacyjnych z rozszerzeniem .MSI. Podczas instalowania instalator jest kopiowany do folderu C:WindowsInstaller. Katalog ten jest systemowym folderem, ukrytym przed użytkownikiem – aby go zobaczyć musimy uwidocznić pliki systemowe + ukryte. Z folderu nie usuwamy żadnych instalatorów pochodzących od programów, które są zainstalowane w systemie, ponieważ pozwalają one na późniejsze naprawianie, modyfikowanie czy usunięcie programu. Jeżeli plik instalacyjny zostanie usunięty, nie będziemy mogli odinstalować programu i wyświetlą się informacje o błędzie:

"Funkcja, której próbujesz użyć, znajduje się w niedostępnym zasobie sieciowym"
"Źródło instalacji tego produktu nie jest dostępne. Sprawdź, czy źródło istnieje i czy masz do niego dostęp"

Aplikacje tego typu w pewnych sytuacjach mogą wyświetlać komunikaty o powtórnej instalacji / konfiguracji lub wskazaniu nośnika w celu kontynuowania instalacji. Przyczyną może być: nie ukończona instalacja lub jej uszkodzenie, usunięcie części plików, niedokładna deinstalacja.
wininstaller2.jpg] wininstaller3.jpg

Jednak możemy zweryfikować każdy z instalatorów – przytrzymując kursor myszki na danym pliku, wyświetlą się wówczas informacje o producencie. Możesz usunąć te, które pochodzą z programów, które są już odinstalowane. Nie usuwamy instalatorów pochodzących od aktualizacji i poprawek Windows.

Wszystkie programy oparte o Windows Installer są odnotowywane w rejestrze w kluczu:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer
W podkluczu UserDataS-x-x-xx\Productsnumer znajdują się wszystkie zainstalowane programy oparte o Windows Installer:
Installer

Problemy mogą sprawiać także nagromadzone pliki tymczasowe w tym folderze, które musimy usunąć.

Narzędzie do rozwiązywania problemów z instalowaniem i odinstalowywaniem programów

Dostępne jest zautomatyzowane narzędzie do rozwiązywania problemów, które nie pozwalają poprawnie odinstalować programy, czy też instalacje programów są blokowane przez inne programy. Narzędzie pomocne, gdy występują błędy opisane powyżej np. brak możliwości odinstalowania na skutek usunięcia pliku z folderu C:\Windows\Installer czy też komunikaty z prośbą o ponowną instalację.

instalator-windows-usuniecie

Wybór trybu pracy: automatyczna lub manualna, ręczna z wyborem poprawek do zastosowania.

Jeżeli wybraliśmy metodę ręczną w kolejnym oknie określamy, czy mamy problem z odinstalowaniem czy zainstalowaniem programu.

Z listy wybieramy program, który nie chce się prawidłowo odinstalować. Można wybrać niewymienione – wówczas musimy wprowadzić 38-znakowy kod produktu np. {056AA1CB-CEE2-462A-8028-82E27A11BD7D}. Znajduje się on np. w rejestrze w kluczu HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserDataS-x-x-xxProductsnumer.

Po wybraniu programu zazwyczaj chcemy go usunąć, więc klikamy w „Tak, spróbuj odinstalować”.

Nastąpi diagnostyka problemów, które zostaną wyświetlone. Wybieramy, które chcemy zastosować i klikamy Dalej.

Narzędzie dokona próby rozwiązania problemów z usunięciem lub zainstalowaniem programu.

Podsumowanie – wyświetlone zostaną wykryte problemy oraz stan zastosowanych poprawek.

Usuwając dany program narzędzie tworzy kopię zapasową usuwanych plików oraz wpisów w rejestrze, co pozwala na ewentualne ich przywrócenie. Backup zapisywany jest w lokalizacji „C:\MATS”. Przykładowy folder z usuwania Java Auto Updater ma nazwę „C:\MATS{4A03706F-666A-4037-7777-5F2748764D10}” i zawiera:

  • katalog FileBackup z kopią usuniętych plików
  • plik FileBackupTemplate.xml z listą usuniętych plików
  • plik registryBackupTemplate.xml z kopią zapasową kluczy rejestru
  • plik RestoreYourFilesAndRegistry.ps1 – skrypt PowerShell, który musimy uruchomić, aby przywrócić backup

Menu Start >>> Wszystkie programy >>> Akcesoria >>> Windows PowerShell.
Najpierw uruchamiamy konsolę Windows PowerShell i wklejamy komendę

Set-ExecutionPolicy Unrestricted

Potwierdzamy wykonanie wpisując „Y”.
Odblokowuje to wykonywanie niepodpisanych skryptów. Aby powrócić do domyślnych ustawień wpisujemy:

Set-ExecutionPolicy AllSigned

Następnie uruchamiamy Windows PowerShell ISE, wskazujemy plik skryptu i uruchamiamy go: menu file >>> Run. Usunięta aplikacja zostanie przywrócona.
powershell ISE

Najnowszą wersją jest PowerShell 2.0, wbudowany w Windows 7. Windows Vista / Server 2008 mają opcjonalny składnik PowerShell 1.0. Windows XP nie zawiera żadnej wersji i trzeba go doinstalować.
Pobieramy pliki z sekcji Rdzeń struktury zarządzania Windows (WinRM 2.0 i środowiska Windows PowerShell 2.0): link
Numer poprawki to KB968930 np. WindowsXP-KB968930-x86-PLK.exe

Windows Installer CleanUP

Uwaga: narzędzie zostało wycofane przez Microsoft. Aktualnie stosujemy wyżej opisany zamiennik.

aplikacja od Microsoftu umożliwiająca usunięcie wpisów w rejestrze oraz danych związanych z instalatorem (pliki aplikacji usuwamy ręcznie) po odinstalowanych programach opartych o Instalator Windows.
Po uruchomieniu wyświetlane są wpisy w rejestrze dotyczące ustawień konfiguracyjnych tego typu aplikacji. Ale musimy być ostrożni, ponieważ na liście znajdują się także prawidłowe pozycje. Użycie dla zainstalowanego programu wymaga późniejszego nadpisania z jego instalatora, ponieważ nie będzie możliwości jego późniejszej deinstalacji / modyfikacji.

Download: najnowsza wersja, msicuu2.zip (wymaga zainstalowania)

Zrzut ekranu:
Windows Installer CleanUP.jpg

Przydatny artykuł Microsoftu: Jak rozwiązywać problemy występujące w trakcie instalowania lub odinstalowywania programów na komputerze z systemem Windows (opis zawiera także Jak odinstalować lub usunąć pakiet Microsoft Office).

4 komentarze

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *