Изолировать размещенный сервис (svchost.exe) в своем собственном процессе
Как уже сейчас знают многие суперпользователи, svchost.exe используется Microsoft для размещения нескольких служб Windows в одном процессе, по одному процессу на группу служб.
В Windows 7 (и позже?) Можно щелкнуть правой кнопкой мыши по определенному процессу svchost.exe в диспетчере задач и выбрать "Перейти к службам", чтобы увидеть службы, запущенные "внутри". Во всех версиях Windows также можно использовать Process Explorer.
Однако это не позволяет увидеть, например, какой конкретный сервис закрепляет ЦП на 100% или использует 700 МБ памяти. Можно вручную остановить службы в той же группе и использовать процесс исключения, но это утомительно, особенно если проблема возникает только периодически.
Вероятно, у Microsoft есть веская причина группировать такие службы (возможно, сокращая накладные расходы на процесс), но есть ли способ заставить отдельный сервис работать изолированно в своем собственном svchost.exe?
2 ответа
Нет, правильный способ - запустить эту команду:
sc config
wuauserv type= own
это настраивает запуск Центра обновления Windows в своем собственном процессе. Чтобы вернуть это, запустите
sc config wuauserv type= share
из командной строки с правами администратора. Это меняет значение настройки type
, Если тип 0x20
это групповой процесс, если значение 0x10
это собственный процесс.
Начиная с Windows 10 Creators Update (версия 1703, сборка 15063), Windows делает это самостоятельно, если у вас достаточно оперативной памяти.
Единственный способ, которым я знаю, - это взлом реестра. Применяется обычный отказ от правки при редактировании базы данных реестра (он может уничтожить что угодно, от вашей установки Windows до всей структуры пространства-времени).
В следующем примере изолируется Центр обновления Windows (wuauserv
) служба, которая, как известно, плохо себя ведет и использует чрезмерные ресурсы. Метод был протестирован только на Windows 7.
Запустите regedit.exe (редактор реестра) и перейдите к
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost
Этот ключ содержит подраздел для каждой группы, содержащий настройки группы, а также значение REG_MULTI_SZ для каждой группы, в которой перечислены службы в группе.
Найдите в подразделе текущую группу целевой службы (в этом примере:
netsvcs
), затем создайте новый подраздел с подходящим именем и идентичным содержимым. Не забудьте соблюдать типы значений, а также содержимое.Создайте значение REG_MULTI_SZ, названное в честь новой группы, содержащее только одну строку с именем службы; и удалите имя службы из существующей группы REG_MULTI_SZ.
Затем перейдите к целевому подразделу службы под
HKLM\SYSTEM\CurrentControlSet\services
, В этом примере:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\wuauserv
Изменить
ImagePath
значение и измените имя группы после-k
на имя новой группы.Перезапустите целевую службу (например, с помощью вкладки "Службы" в диспетчере задач или с помощью services.msc), и она должна появиться в отдельном процессе svchost.exe.
В следующий раз, когда Центр обновления Windows будет запущен, его использование ресурсов будет сразу же видно в диспетчере задач, и его даже можно будет убить с помощью "Завершить процесс" (хотя не рекомендуется для более важных служб).
Если служба не запускается, просмотрите шаги, описанные выше, и попробуйте снова, или попробуйте отменить изменения, одновременно вызывая предупреждение в верхней части.:-)