Isolar o serviço hospedado (svchost.exe) em seu próprio processo

11

Como muitos superusuários provavelmente já sabem, svchost.exe é usado pela Microsoft para hospedar vários serviços do Windows em um único processo, com um processo por grupo de serviços.

No Windows 7 (e posterior?), pode-se clicar com o botão direito do mouse em um processo svchost.exe específico no Gerenciador de Tarefas e selecionar "Ir para serviço (s)" para ver os serviços em execução "dentro". Em todas as versões do Windows, o Process Explorer também pode ser usado.

No entanto, isso não permite ver qual serviço específico está fixando a CPU em 100% ou usando 700 MB de memória. Pode-se parar manualmente os serviços no mesmo grupo e usar o processo de eliminação, mas é entediante, especialmente se o problema ocorrer apenas intermitentemente.

A Microsoft presumivelmente tem uma boa razão para agrupar serviços como este (reduzindo a sobrecarga por processo, talvez?), mas existe uma maneira de forçar um serviço específico a rodar isolado em seu próprio svchost.exe?

    
por Søren Løvborg 03.01.2015 / 19:43

2 respostas

12

Não, a forma correta é executar este comando:

sc config wuauserv type= own

isso configura para executar o Windows Update em seu próprio processo. Para reverter isso, execute

sc config wuauserv type= share

de um prompt de comando com direitos de administrador . Isso altera o valor de configuração type . Se o tipo for 0x20 , é um processo de grupo , se o valor for 0x10 é um processo próprio .

Desde o Windows 10 Creators Update (Versão 1703, Build 15063), o Windows faz isso sozinho, se você tiver RAM suficiente .

    
por 04.01.2015 / 08:43
1

A única maneira que conheço é por meio de invasão de registro. O aviso de edição de banco de dados de registro usual se aplica (ele pode destruir qualquer coisa desde a instalação do Windows até toda a estrutura do espaço-tempo).

O exemplo a seguir isola o serviço Windows Update ( wuauserv ), que é conhecido por se comportar mal e usar recursos excessivos. O método foi testado apenas no Windows 7 .

  1. Inicie o regedit.exe (Editor do Registro) e navegue até

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

    Esta chave contém uma subchave para cada grupo contendo configurações de grupo, bem como um valor REG_MULTI_SZ para cada grupo listando os serviços no grupo.

  2. Procure na subchave do grupo atual do serviço de destino (neste exemplo: netsvcs ), crie uma nova subchave com um nome adequado e conteúdo idêntico. Lembre-se de observar os tipos de valor, bem como o conteúdo.

  3. Crie um valor REG_MULTI_SZ com o nome do novo grupo, contendo uma única linha com o nome do serviço; e remova o nome do serviço do seu grupo existente REG_MULTI_SZ.

  4. Em seguida, navegue até a subchave de serviço de destino abaixo de HKLM\SYSTEM\CurrentControlSet\services . Neste exemplo:

     HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\wuauserv
    
  5. Edite o valor ImagePath e altere o nome do grupo após -k para o novo nome do grupo.

  6. Reinicie o serviço de destino (por exemplo, usando a guia Serviços no Gerenciador de tarefas ou via services.msc) e ele deve aparecer em seu próprio processo svchost.exe separado.

Na próxima vez que o Windows Update for executado, seu uso de recursos é imediatamente visível no Gerenciador de Tarefas e pode até ser eliminado usando-se "Finalizar processo" (não recomendado para serviços mais críticos, no entanto).

Se o serviço não for iniciado, analise as etapas acima e tente novamente ou tente reverter suas alterações, enquanto recupera o aviso na parte superior. : -)

    
por 03.01.2015 / 19:43