artykuły
Powrót do listy artykułów

Temat artykułu: Instalowanie wielu poprawek i SP do systemów Windows 2000/XP/2003 z tylko jednym restartem
Tekst napisał pitt2k dnia 04-03-2006

W tym artykule opisano, jak można zainstalować wiele aktualizacji produktu systemu Windows (na przykład aktualizacji krytycznych, aktualizacji zabezpieczeń lub poprawek) używających programu Hotfix.exe (Microsoft Windows NT 4.0) lub programu Update.exe (Microsoft Windows 2000, Microsoft Windows XP lub Microsoft Windows Server 2003) z tylko jednym ponownym uruchomieniem komputera. Ten artykuł jest przeznaczony dla administratorów i specjalistów IT. Aktualizacje produktu systemu Windows, które używają programu Hotfix.exe lub Update.exe, można zainstalować osobno lub razem z systemem Windows (z dodatkiem Service Pack lub bez dodatku).

Uwaga Procedura opisana w niniejszym artykule nie działa w odniesieniu do aktualizacji produktu, które nie używają programu Hotfix.exe lub Update.exe jako programu instalacyjnego. Na przykład aktualizacje programu Internet Explorer dla systemów Windows NT 4.0, Windows 2000 i Windows XP korzystają z procesu instalacji opartego na plikach INF, a nie na programie Update.exe. Efektem tego jest niemożność zastosowania tej procedury w celu zainstalowania wielu aktualizacji programu Microsoft Internet Explorer z tylko jednym ponownym uruchomieniem komputera z systemem Windows NT 4.0, Windows 2000 lub Windows XP. Ponieważ aktualizacje programu Internet Explorer dla systemu Windows Server 2003 używają programu Update.exe jako programu instalacyjnego, można użyć tej procedury do zainstalowania ich.

Aktualizacja systemu Windows (na przykład aktualizacja krytyczna, aktualizacja zabezpieczeń lub poprawka) to plik wykonywalny (exe) zawierający jeden lub więcej plików systemowych, które można zastosować do systemu Windows w celu rozwiązania określonego problemu. Pomoc techniczna firmy Microsoft rozprowadza poprawki wśród klientów, którzy są poważnie zagrożeni wystąpieniem określonego problemu. Aktualizacje krytyczne i aktualizacje zabezpieczeń to poprawki zalecane przez firmę Microsoft wszystkim klientom. Aktualizacje krytyczne i aktualizacje zabezpieczeń można pobrać z witryny Windows Update w sieci Web, z witryny Microsoft — Centrum pobierania lub z innych witryn firmy Microsoft w sieci Web.

Aktualizacje systemu Windows Server 2003 lub aktualizacje systemów Windows XP i Windows 2000, które zostały utworzone po grudniu 2002

Uwaga Aby określić datę utworzenia aktualizacji, należy sprawdzić datę modyfikacji programu Update.exe lub Hotfix.exe w pakiecie aktualizacji.

Aby zainstalować aktualizację systemu Windows na pojedynczym komputerze, należy uruchomić program aktualizacji produktu na komputerze, który ma być zaktualizowany. Aby zainstalować wiele aktualizacji produktu bez ponownego uruchamiania komputera po każdej aktualizacji, należy użyć przełącznika /z.

Opcje wiersza polecenia programu Update.exe

W poniższej tabeli zostały przedstawione opcje (lub przełączniki) wiersza polecenia obsługiwane przez program Update.exe:
Przełącznik Opis
----------- ----------- 
/f          Wymusza zamknięcie innych programów podczas zamykania systemu.
/n          Nie wykonuje kopii zapasowych plików potrzebnych do usunięcia poprawek.
/z          Nie uruchamia ponownie komputera po ukończeniu instalacji. 
/q          Tryb cichy, bez interakcji użytkownika. 
/m          Używa trybu instalacji nienadzorowanej (Windows 2000).  
/u          Używa trybu instalacji nienadzorowanej (Windows XP). 
/l          Wyświetla listę zainstalowanych poprawek. 
Poniższy kod przykładowy stanowi plik wsadowy, który powoduje zainstalowanie wielu aktualizacji produktu i zapewnia, że po ponownym uruchomieniu komputera zostaną zastąpione właściwe pliki.
@echo off
setlocal
set PATHTOFIXES=E:\hotfix

%PATHTOFIXES%\Q123456_w2k_sp4_x86.exe /Z /M
%PATHTOFIXES%\Q123321_w2k_sp4_x86.exe /Z /M
%PATHTOFIXES%\Q123789_w2k_sp4_x86.exe /Z /M
Uwaga Funkcje programu QChain.exe są dostępne we wszystkich aktualizacjach systemów Windows Server 2003, Windows XP i Windows 2000, które używają programu Update.exe i które zostały wydane po 18 maja 2001. Występuje jednak problem dotyczący aktualizacji produktów wydanych przed grudniem 2002, które w pewnych sytuacjach mogą zastosować niewłaściwe pliki binarne na komputerze. W marcu 2003 firma Microsoft wydała zaktualizowaną wersję pliku QChain.exe w celu rozwiązania tego problemu.

Wszystkie aktualizacje systemu Windows NT 4.0 lub aktualizacje systemów Windows XP i Windows 2000, które zostały utworzone przed grudniem 2002

Uwaga Aby określić datę utworzenia aktualizacji produktu, należy sprawdzić datę modyfikacji programu instalacyjnego Update.exe lub Hotfix.exe w pakiecie aktualizacji.

Firma Microsoft wydała narzędzie wiersza polecenia o nazwie QChain.exe. Dzięki programowi QChain.exe administratorzy systemu mogą uszeregować aktualizacje razem. Szeregowanie aktualizacji pozwala zainstalować wiele aktualizacji bez ponownego uruchamiania komputera między poszczególnymi aktualizacjami. Bez tego narzędzia jedyną obsługiwaną metodą jest ponowne uruchomienie komputera po instalacji każdej aktualizacji. Narzędzie QChain.exe ma następujące zalety:
  • Zwiększa czas działania serwerów, ponieważ komputery nie są ponownie uruchamiane po każdej instalacji aktualizacji.
  • Umożliwia szybszą instalację wielu aktualizacji na pojedynczym komputerze.
  • Działa w systemach Windows 2000 i Windows NT 4.0.
Uwaga Funkcje programu QChain.exe są dostępne we wszystkich aktualizacjach produktów systemów Windows XP i Windows 2000, które zostały wydane po 18 maja 2001, jednak istnieje problem dotyczący aktualizacji produktów wydanych przed grudniem 2002, które w pewnych sytuacjach mogą umieścić niewłaściwe pliki binarne na komputerze. W marcu 2003 firma Microsoft wydała zaktualizowaną wersję pliku QChain.exe w celu rozwiązania tego problemu.

Szeregowanie instalacji aktualizacji bez programu QChain.exe nie jest bezpieczne

Jeśli podczas instalacji aktualizacji plik jest zablokowany lub używany, nie można go zastąpić. W rezultacie plik zostanie umieszczony w kolejce oczekujących zmian nazw plików i zostanie zastąpiony po ponownym uruchomieniu komputera. Problem występuje w następującym scenariuszu:
  • Instalujesz aktualizacje A i B bez ponownego uruchamiania komputera między instalacjami.
  • Oba pakiety zawierają plik X. Plik X pakietu A ma wersję 3; poprawka pakietu B zawiera wersję 2. Wersja pliku X na komputerze to wersja 1.
  • Przy instalacji pakietu A umieszcza on swoją wersję pliku X w kolejce oczekujących zmian nazw plików.
  • Przy instalacji pakietu B umieszcza on swoją wersję pliku X w kolejce oczekujących zmian nazw plików.
  • Po ponownym uruchomieniu komputera instalowany jest plik X pakietu B, ponieważ był on instalowany jako ostatni (w kolejce oczekujących zmian nazw plików ostatnim plikiem jest używany plik). W rezultacie zostanie zainstalowana wersja 2, zamiast oczekiwanej wersji 3.

Jeśli wcześniej uszeregowane aktualizacje zostały zainstalowane bez ponownego uruchamiania

Mimo, że ten scenariusz występuje rzadko, warto jest sprawdzić, czy na komputerze zostały zainstalowane wszystkie oczekiwane poprawki. Aby to sprawdzić, użyj narzędzia Qfecheck.exe.

Program QChain.exe czyści klucz rejestru używany przez operacje oczekujących zmian nazw plików, aby upewnić się, że po ponownym uruchomieniu komputera zostanie zainstalowana tylko najnowsza wersja pliku.

Aby zainstalować wiele aktualizacji z tylko jednym ponownym uruchomieniem

  1. Uruchom instalatora aktualizacji z przełącznikiem -z, aby instalator nie uruchamiał ponownie komputera po instalacji. Możesz dodać przełącznik -m (tryb cichy), jeśli nie chcesz, aby podczas instalacji były wyświetlane monity lub komunikaty.

    Instalator aktualizacji jest jednym z następujących programów:
    • Plik programu samorozpakowującego się pakietu (na przykład Qnnnnnn_w2k_spx_x86_en.exe).

      —lub—
    • Hotfix.exe (jeśli wszystkie pliki zostały wyodrębnione z pakietu).
  2. Po zainstalowaniu wszystkich poprawek uruchom program QChain.exe.
  3. Ponownie uruchom komputer.
Aby to zrobić, można również utworzyć plik wsadowy. Poniżej podano przykład pliku wsadowego demonstrującego tę metodę:
@echo off
setlocal
set PATHTOFIXES=wybrana ścieżka
%PATHTOFIXES%\Q123456_w2k_sp2_x86.exe -z -m
%PATHTOFIXES%\Q123321_w2k_sp2_x86.exe -z -m
%PATHTOFIXES%\Q123789_w2k_sp2_x86.exe -z -m
%PATHTOFIXES%\qchain.exe

Jak uzyskać program QChain.exe

Funkcje programu QChain.exe są dostępne we wszystkich aktualizacjach systemów Windows XP i Windows 2000, które zostały wydane po 18 maja 2001, jednak istnieje problem dotyczący aktualizacji produktów wydanych przed grudniem 2002, które w pewnych sytuacjach mogą umieścić niewłaściwe pliki binarne na komputerze. W marcu 2003 firma Microsoft wydała zaktualizowaną wersję pliku QChain.exe w celu rozwiązania tego problemu.

Składnia poleceń programu QChain.exe

qchain [nazwa_pliku_dziennika]

Opcjonalny parametr [nazwa_pliku_dziennika] powoduje utworzenie pliku z migawką zawartości klucza operacji oczekujących zmian nazw plików sprzed instalacji i po instalacji.

Przykładowe dane wynikowe programu QChain.exe

---- Stare informacje w Rejestrze ------
Źródło:C:\WINNT\inf\acpi.inf
Wersja: 5.0.2183.1
Miejsce docelowe: d:\ntsust\testregchech\1394.inf
Wersja: 5.0.2183.1

Źródło:C:\WINNT\inf\adm_mult.inf
Wersja: 5.0.2184.1
Miejsce docelowe: d:\ntsust\testregchech\1394.inf
Wersja: 5.0.2183.1

Źródło:C:\WINNT\inf\banshee.inf
Wersja: 5.0.2080.1
Miejsce docelowe: d:\ntsust\testregchech\1394.inf
Wersja: 5.0.2183.1

---- Nowe informacje w Rejestrze ------
Źródło:C:\WINNT\inf\adm_mult.inf
Wersja: 5.0.2184.1
Miejsce docelowe: d:\ntsust\testregchech\1394.inf
Wersja: 5.0.2183.1

Ograniczenia programu QChain.exe

Mimo że program QChain pracuje z większością aktualizacji systemów Windows NT 4.0 i Windows 2000, program ten może nie działać z poprawkami, które zawierają pliki binarne wymienione w następującym kluczu rejestru:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\KnownDLLs

Pliki binarne wymienione w tym kluczu rejestru są ładowane do pamięci przy uruchamianiu. Gdy instalator aktualizacji wywoła funkcję GetFileVersionInfo na pliku binarnym z tej listy, instalator odwołuje się do pliku binarnego, który jest już załadowany, a nie do pliku binarnego, który faktycznie znajduje się w lokalizacji docelowej.

Ponieważ pliki binarne wymienione w kluczu rejestru KnownDLLs są ładowane do pamięci przy uruchamianiu systemu, instalator aktualizacji musi zastąpić docelowy plik binarny poprawionym plikiem binarnym przed ponownym uruchomieniem komputera. Z tego powodu instalator aktualizacji nie tworzy operacji oczekującej zmiany nazwy pliku w celu zastąpienia pliku binarnego podczas ponownego uruchamiania. Zamiast tego aktualizacja przenosi aktualny plik binarny do lokalizacji tymczasowej, umieszcza poprawiony plik binarny w miejscu, gdzie znajdował się bieżący plik binarny, a następnie tworzy operację oczekującej zmiany nazwy pliku w celu usunięcia bieżącego pliku binarnego po ponownym uruchomieniu komputera.

Program QChain ma wpływ tylko na operacje oczekujących zmian nazw plików, które powodują zastąpienie plików binarnych. Nie ma wpływu na operacje oczekujących zmian nazw plików, które powodują usunięcie plików.

Wszystkie aktualizacje systemu Windows NT 4.0 i wszystkie aktualizacje systemu Windows 2000 poprzedzające dodatek SP2 używają funkcji GetFileVersionInfo do identyfikacji wersji pliku. W razie zainstalowania dwóch lub więcej aktualizacji systemu Windows NT 4.0 lub aktualizacji systemu Windows 2000 poprzedzających dodatek SP2, jeśli te aktualizacje zawierają pokrywające się zawartości klucza KnownDLLs, użycie programu QChain do uszeregowania instalacji tych aktualizacji nie zapewni zainstalowania najnowszej wersji poprawionego pliku.

Poniżej został przedstawiony scenariusz ilustrujący, dlaczego program QChain może nie umieścić poprawnej wersji pliku binarnego w systemie:
  • Instalujesz pakiety aktualizacji A i B bez ponownego uruchamiania komputera między instalacjami.
  • Oba pakiety zawierają plik Kernel32.dll, który jest wymieniony na liście KnownDLLs. Pakiet A zawiera plik Kernel32.dll w wersji 3, pakiet B zawiera plik Kernel32.dll w wersji 2, a na komputerze zainstalowana jest wersja 1 tego pliku.
  • Podczas instalowania pakietu A wywołanie funkcji GetFileVersionInfo informuje, że komputer zawiera plik Kernel32.dll w wersji 1. Ponieważ pakiet A zawiera wersję 3, instalator aktualizacji wykrywa potrzebę zastąpienia pliku.
    • Instalator aktualizacji przenosi plik Kernel32.dll w wersji 1 do lokalizacji tymczasowej i tworzy operację oczekującej zmiany nazwy pliku w celu usunięcia pliku Kernel32.dll z lokalizacji tymczasowej podczas ponownego uruchomienia komputera.
    • Plik Kernel32.dll pakietu A w wersji 3 został skopiowany na komputer.
  • Podczas instalowania pakietu B wywołanie funkcji GetFileVersionInfo w dalszym ciągu informuje, że na komputerze jest zainstalowana wersja 1 pliku Kernel32.dll, ponieważ funkcja GetFileVersionInfo odczytuje informacje o wersji z pliku Kernel32.dll, który jest załadowany do pamięci. W pakiecie B znajduje się wersja 2, dlatego poprawka wykrywa potrzebę zastąpienia pliku.
    • Instalator aktualizacji przenosi plik Kernel32.dll, który znajduje się aktualnie na komputerze (plik Kernel32.dll w wersji 3 z pakietu A), do lokalizacji tymczasowej i tworzy operację oczekującej zmiany nazwy pliku w celu usunięcia pliku Kernel32.dll (w wersji 3) z lokalizacji tymczasowej podczas ponownego uruchomienia komputera.
    • Plik Kernel32.dll pakietu B w wersji 2 został skopiowany na komputer.
  • Jest uruchamiany program QChain, ale nie ma operacji oczekujących zmian nazw plików, które miałyby zastąpić pliki, dlatego program QChain nie wykonuje żadnej operacji.
  • Ponieważ pakiet B został zainstalowany jako ostatni, plik Kernel32.dll w wersji 2 z pakietu B znajduje się w poprawnej lokalizacji na komputerze. Z tego powodu jest on ładowany do pamięci przy uruchamianiu komputera. Operacje oczekujących zmian nazw plików usuwają zarówno oryginalny plik Kernel32.dll w wersji 1, jak i plik Kernel32.dll w wersji 3 z pakietu A. W rezultacie na komputerze będzie się znajdował plik Kernel32.dll w wersji 2, a nie w wersji 3.
Jest dostępna poprawka systemu Windows 2000 późniejsza od dodatku SP2, w której funkcja GetFileVersionInfo nie jest już używana w odniesieniu do wymienionych na liście KnownDLLs plików załadowanych do pamięci. Zamiast tego instalator aktualizacji mapuje plik znajdujący się rzeczywiście w lokalizacji docelowej, a następnie wywołuje funkcję GetFileVersionInfo w odniesieniu do tego zmapowanego pliku. Dzięki temu można użyć programu QChain.exe do szeregowania aktualizacji systemu Windows 2000 późniejszych od dodatku SP2. W takim przypadku zostanie zainstalowana najnowsza wersja pliku, niezależnie od kolejności instalowania aktualizacji.

Jeśli odtworzony zostanie poprzedni scenariusz i użyta zostanie w nim aktualizacja systemu Windows 2000 późniejsza od dodatku SP2, poprawka pakietu B zmapuje plik Kernel32.dll pochodzący z pakietu A i rozpozna wersję 3. Wersja 3 jest nowsza niż własna wersja 2 pliku Kernel32.dll w pakiecie B. Dlatego też pakiet B nie zamieni znajdującego się w systemie pliku Kernel32.dll i wersja 3 pliku Kernel32.dll z pakietu A będzie poprawną wersją używaną przez komputer po ponownym uruchomieniu.