12

Как уже сейчас знают многие суперпользователи, svchost.exe используется Microsoft для размещения нескольких служб Windows в одном процессе, по одному процессу на группу служб.

В Windows 7 (и более поздних версиях?) Можно щелкнуть правой кнопкой мыши определенный процесс svchost.exe в диспетчере задач и выбрать "Перейти к службам", чтобы увидеть службы, запущенные "внутри". Во всех версиях Windows также можно использовать Process Explorer .

Однако это не позволяет увидеть, например, какой конкретный сервис закрепляет ЦП на 100% или использует 700 МБ памяти. Можно вручную остановить службы в той же группе и использовать процесс исключения, но это утомительно, особенно если проблема возникает только периодически.

Предположительно, у Microsoft есть веская причина группировать такие службы (возможно, сокращая накладные расходы на процесс), но есть ли способ заставить отдельную службу работать изолированно в своем собственном svchost.exe?

2 ответа2

14

Нет, правильный способ - запустить эту команду:

sc config wuauserv type= own

это настраивает запуск Центра обновления Windows в своем собственном процессе. Чтобы вернуть это, запустите

sc config wuauserv type= share

из командной строки с правами администратора. Это меняет type значения настройки. Если тип 0x20 это групповой процесс, если значение 0x10 это собственный процесс.

Начиная с Windows 10 Creators Update (версия 1703, сборка 15063), Windows делает это самостоятельно, если у вас достаточно оперативной памяти.

1

Единственный способ, которым я знаю, - это взлом реестра. Применяется обычный отказ от прав на редактирование базы данных реестра (он может уничтожить что угодно, от вашей установки Windows до всей структуры пространства-времени).

В следующем примере изолируется служба Windows Update (wuauserv), которая, как известно, ведет себя неправильно и использует чрезмерные ресурсы. Метод был протестирован только на Windows 7.

  1. Запустите regedit.exe (редактор реестра) и перейдите к

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

    Этот ключ содержит подраздел для каждой группы, содержащий настройки группы, а также значение REG_MULTI_SZ для каждой группы, в которой перечислены службы в группе.

  2. Найдите в подразделе текущую группу целевой службы (в этом примере: netsvcs), затем создайте новый подраздел с подходящим именем и идентичным содержимым. Не забудьте соблюдать типы значений, а также содержимое.

  3. Создайте значение REG_MULTI_SZ, названное в честь новой группы, содержащее только одну строку с именем службы; и удалите имя службы из существующей группы REG_MULTI_SZ.

  4. Затем перейдите к целевому подразделу службы в разделе HKLM\SYSTEM\CurrentControlSet\services . В этом примере:

     HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\wuauserv
    
  5. Отредактируйте значение ImagePath и измените имя группы после -k на новое имя группы.

  6. Перезапустите целевую службу (например, с помощью вкладки «Службы» в диспетчере задач или с помощью services.msc), и она должна появиться в отдельном процессе svchost.exe.

В следующий раз, когда Центр обновления Windows будет запущен, его использование ресурсов будет сразу же видно в диспетчере задач, и его даже можно будет убить с помощью "Завершить процесс" (хотя не рекомендуется для более важных служб).

Если служба не запускается, просмотрите шаги, описанные выше, и попробуйте снова, или попробуйте отменить изменения, одновременно вызывая предупреждение в верхней части. :-)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .