Wyizoluj hostowaną usługę (svchost.exe) we własnym procesie

13

Jak zapewne wie wielu superużytkowników, svchost.exe jest używany przez Microsoft do hostowania wielu usług Windows w jednym procesie, z jednym procesem na grupę usług.

W systemie Windows 7 (i nowszym?) Można kliknąć prawym przyciskiem myszy konkretny proces svchost.exe w Menedżerze zadań i wybrać „Przejdź do usług”, aby zobaczyć usługi działające „wewnątrz”. We wszystkich wersjach systemu Windows można również używać Eksploratora procesów .

Nie pozwala to jednak zobaczyć np., Która konkretna usługa przypina procesor do 100% lub używa 700 MB pamięci. Można ręcznie zatrzymać usługi w tej samej grupie i skorzystać z procesu eliminacji, ale jest to żmudne, zwłaszcza jeśli problem występuje tylko sporadycznie.

Microsoft prawdopodobnie ma dobry powód, aby grupować takie usługi (być może zmniejszając narzut związany z poszczególnymi procesami?), Ale czy istnieje sposób, aby wymusić uruchomienie określonej usługi w jej własnym pliku svchost.exe?

Søren Løvborg
źródło

Odpowiedzi:

16

Nie, właściwym sposobem jest uruchomienie tego polecenia:

sc configwuauserv type= own

konfiguruje to uruchamianie Windows Update we własnym procesie. Aby to cofnąć, uruchom

sc config wuauserv type= share

z wiersza polecenia z uprawnieniami administratora . To zmienia wartość ustawienia type. Jeśli typ jest 0x20procesem grupowym , jeśli wartością jest 0x10proces własny .

Od czasu aktualizacji Windows 10 Creators Update (wersja 1703, kompilacja 15063), system Windows robi to samodzielnie, jeśli masz wystarczającą ilość pamięci RAM .

magicandre1981
źródło
1

Wiem tylko, że to hakowanie rejestru. Obowiązuje zwykłe zastrzeżenie dotyczące edytowania bazy danych rejestru (może zniszczyć wszystko, od instalacji systemu Windows do całej struktury czasoprzestrzeni).

Poniższy przykład izoluje wuauservusługę Windows Update ( ), o której wiadomo, że źle się zachowuje i używa nadmiernych zasobów. Metoda została przetestowana tylko w systemie Windows 7 .

  1. Uruchom regedit.exe (Edytor rejestru) i przejdź do

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost
    

    Ten klucz zawiera podklucz dla każdej grupy zawierający ustawienia grupy, a także wartość REG_MULTI_SZ dla każdej grupy z listą usług w grupie.

  2. Poszukaj w podkluczu bieżącej grupy usługi docelowej (w tym przykładzie netsvcs:), a następnie utwórz nowy podklucz o odpowiedniej nazwie i identycznej zawartości. Pamiętaj, aby przestrzegać typów wartości, a także zawartości.

  3. Utwórz wartość REG_MULTI_SZ nazwaną na cześć nowej grupy, zawierającą tylko jeden wiersz z nazwą usługi; i usuń nazwę usługi z istniejącej grupy REG_MULTI_SZ.

  4. Następnie przejdź do podklucza usługi docelowej poniżej HKLM\SYSTEM\CurrentControlSet\services. W tym przykładzie:

     HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\wuauserv
    
  5. Edytuj ImagePathwartość i zmień nazwę grupy -kna nową nazwę grupy.

  6. Zrestartuj usługę docelową (np. Używając karty Usługi w Menedżerze zadań lub via services.msc) i powinna pojawić się we własnym oddzielnym procesie svchost.exe.

Następnym razem, gdy Windows Update uruchomi amoka, jego wykorzystanie zasobów jest natychmiast widoczne w Menedżerze zadań, a nawet można go zabić za pomocą „Zakończ proces” (choć nie jest to zalecane w przypadku bardziej krytycznych usług).

Jeśli usługa się nie uruchomi, przejrzyj powyższe kroki i spróbuj ponownie lub spróbuj cofnąć zmiany, przywołując ostrzeżenie u góry. :-)

Søren Løvborg
źródło