Isolieren Sie den gehosteten Dienst (svchost.exe) in einem eigenen Prozess

14

Wie vielen Superusern wahrscheinlich inzwischen bekannt ist, wird svchost.exe von Microsoft verwendet, um mehrere Windows-Dienste in einem einzigen Prozess mit einem Prozess pro Dienstgruppe zu hosten.

In Windows 7 (und höher?) Kann man im Task-Manager mit der rechten Maustaste auf einen bestimmten svchost.exe-Prozess klicken und "Zu Diensten gehen" auswählen, um die darin ausgeführten Dienste anzuzeigen. In allen Windows-Versionen kann auch der Prozess-Explorer verwendet werden.

Dies erlaubt es jedoch nicht zu sehen, z. B. welcher bestimmte Dienst die CPU zu 100% fixiert oder 700 MB Speicher verwendet. Man kann Dienste in derselben Gruppe manuell stoppen und den Eliminierungsprozess verwenden, dies ist jedoch langwierig, insbesondere wenn das Problem nur zeitweise auftritt.

Microsoft hat vermutlich einen guten Grund, Dienste wie diesen zu gruppieren (möglicherweise den Prozessaufwand zu reduzieren?), Aber gibt es eine Möglichkeit, einen bestimmten Dienst zu zwingen, isoliert in seiner eigenen svchost.exe ausgeführt zu werden?

Søren Løvborg
quelle

Antworten:

17

Nein, der richtige Weg ist, diesen Befehl auszuführen:

sc configwuauserv type= own

Dadurch wird konfiguriert, dass Windows Update in einem eigenen Prozess ausgeführt wird. Um dies rückgängig zu machen, führen Sie aus

sc config wuauserv type= share

an einer Eingabeaufforderung mit Administratorrechten . Dies ändert den Einstellwert type. Wenn Typ ist 0x20, ist es ein Gruppenprozess , wenn der Wert ist 0x10, ist es ein eigener Prozess .

Seit dem Windows 10 Creators Update (Version 1703, Build 15063) führt Windows dies selbst aus, wenn Sie über genügend RAM verfügen .

magicandre1981
quelle
1

Ich weiß es nur über Registry-Hacking. Es gilt der übliche Haftungsausschluss für die Bearbeitung von Registrierungsdatenbanken (er kann alles von Ihrer Windows-Installation bis zur gesamten Struktur der Raumzeit zerstören).

Im folgenden Beispiel wird der Windows Update ( wuauserv) -Dienst isoliert , von dem bekannt ist, dass er sich schlecht verhält und übermäßige Ressourcen verwendet. Die Methode wurde nur unter Windows 7 getestet .

  1. Starten Sie regedit.exe (Registrierungseditor) und navigieren Sie zu

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

    Dieser Schlüssel enthält einen Unterschlüssel für jede Gruppe mit Gruppeneinstellungen sowie einen REG_MULTI_SZ-Wert für jede Gruppe, in der die Dienste in der Gruppe aufgelistet sind.

  2. Suchen Sie im Unterschlüssel nach der aktuellen Gruppe des Zieldienstes (in diesem Beispiel netsvcs:) und erstellen Sie einen neuen Unterschlüssel mit einem geeigneten Namen und identischem Inhalt. Denken Sie daran, die Werttypen sowie den Inhalt zu beachten.

  3. Erstellen Sie einen REG_MULTI_SZ-Wert, der nach der neuen Gruppe benannt ist und nur eine einzelne Zeile mit dem Dienstnamen enthält. und entfernen Sie den Dienstnamen aus der vorhandenen Gruppe REG_MULTI_SZ.

  4. Navigieren Sie als Nächstes zum Unterschlüssel des Zieldienstes darunter HKLM\SYSTEM\CurrentControlSet\services. In diesem Beispiel:

     HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\wuauserv
    
  5. Bearbeiten Sie den ImagePathWert und ändern Sie den Gruppennamen nach -kin den neuen Gruppennamen.

  6. Starten Sie den Zieldienst neu (z. B. über die Registerkarte Dienste im Task-Manager oder über services.msc), und er sollte in einem separaten Prozess svchost.exe angezeigt werden.

Wenn Windows Update das nächste Mal Amok ausführt, wird seine Ressourcennutzung sofort im Task-Manager angezeigt und kann sogar mit "Prozess beenden" beendet werden (für kritischere Dienste jedoch nicht empfohlen).

Wenn der Dienst nicht gestartet werden kann, überprüfen Sie die obigen Schritte und versuchen Sie es erneut oder versuchen Sie, Ihre Änderungen zurückzusetzen, während Sie die Warnung oben abrufen. :-)

Søren Løvborg
quelle