Isoler le service hébergé (svchost.exe) dans son propre processus

13

Comme de nombreux superutilisateurs le savent probablement déjà, svchost.exe est utilisé par Microsoft pour héberger plusieurs services Windows en un seul processus, avec un processus par groupe de services.

Dans Windows 7 (et versions ultérieures?), On peut cliquer avec le bouton droit sur un processus svchost.exe spécifique dans le Gestionnaire des tâches et sélectionner «Aller aux services» pour voir les services exécutés «à l'intérieur». Dans toutes les versions de Windows, Process Explorer peut également être utilisé.

Cependant, cela ne permet pas de voir, par exemple, quel service particulier épingle le processeur à 100% ou utilise 700 Mo de mémoire. On peut arrêter manuellement les services dans le même groupe et utiliser le processus d'élimination, mais c'est fastidieux, surtout si le problème ne se produit que par intermittence.

Microsoft a sans doute une bonne raison de regrouper des services comme celui-ci (en réduisant peut-être les frais généraux par processus?), Mais existe-t-il un moyen de forcer un service spécifique à s'exécuter de manière isolée dans son propre svchost.exe?

Søren Løvborg
la source

Réponses:

16

Non, la bonne façon est d'exécuter cette commande:

sc configwuauserv type= own

cela configure pour exécuter Windows Update dans son propre processus. Pour annuler cela, exécutez

sc config wuauserv type= share

à partir d'une invite de commande avec des droits d'administrateur . Cela modifie la valeur du paramètre type. Si le type est, 0x20c'est un processus de groupe , si la valeur est, 0x10c'est un processus propre .

Depuis la mise à jour des créateurs de Windows 10 (version 1703, build 15063), Windows le fait seul si vous avez suffisamment de RAM .

magicandre1981
la source
1

Je ne connais que le piratage du registre. La clause de non-responsabilité habituelle relative à la modification de la base de données du registre s'applique (elle peut détruire tout ce qui se trouve dans votre installation Windows sur l'intégralité de la structure de l'espace-temps).

L'exemple suivant isole le service Windows Update ( wuauserv), qui est connu pour mal se comporter et utiliser des ressources excessives. La méthode a été testée uniquement sur Windows 7 .

  1. Démarrez regedit.exe (Éditeur du Registre) et accédez à

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

    Cette clé contient une sous-clé pour chaque groupe contenant des paramètres de groupe, ainsi qu'une valeur REG_MULTI_SZ pour chaque groupe répertoriant les services du groupe.

  2. Recherchez dans la sous-clé le groupe actuel du service cible (dans cet exemple:) netsvcs, puis créez une nouvelle sous-clé avec un nom approprié et un contenu identique. N'oubliez pas d'observer les types de valeur, ainsi que le contenu.

  3. Créez une valeur REG_MULTI_SZ nommée d'après le nouveau groupe, contenant une seule ligne unique avec le nom du service; et supprimez le nom du service de son groupe existant REG_MULTI_SZ.

  4. Ensuite, accédez à la sous-clé de service cible ci-dessous HKLM\SYSTEM\CurrentControlSet\services. Dans cet exemple:

     HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\wuauserv
    
  5. Modifiez la ImagePathvaleur et remplacez le nom du groupe -kpar le nouveau nom de groupe.

  6. Redémarrez le service cible (par exemple en utilisant l'onglet Services dans le Gestionnaire des tâches ou via services.msc), et il devrait apparaître dans son propre processus svchost.exe distinct.

La prochaine fois que Windows Update s'exécute, son utilisation des ressources est immédiatement visible dans le Gestionnaire des tâches, et il peut même être tué à l'aide de "Fin du processus" (cependant déconseillé pour les services plus critiques).

Si le service ne démarre pas, passez en revue les étapes ci-dessus et réessayez, ou essayez d'annuler vos modifications, tout en rappelant l'avertissement en haut. :-)

Søren Løvborg
la source