Запустите сценарий PowerShell при запуске службы
Я хотел бы установить Affinity
а также Priority
процесса службы, когда он запущен (без изменения кода службы / процесса, я не владею кодом, это сторонняя служба).
Я знаю, что могу сделать:
$Process = Get-Process MyService
$Process.ProcessorAffinity = 4
в PowerShell, чтобы изменить Affinity
процесса или префикс командного пути с:
cmd.exe /c start "Some Process Name" /affinity 4
Однако ни один из них не применим к изменению Affinity
а также Priority
процесса службы автоматически при каждом запуске службы) Как я могу сделать это, не используя какое-либо стороннее приложение, которое "поддерживает" сходство процессов при перезапуске (я бы очень хотел написать / создать решение самостоятельно, а не полагаться на еще одно приложение) "настроить" окна).
2 ответа
Хорошо, я опираюсь на комментарий @Art.Vandelay05 и вот (ИМХО самое интуитивное) решение.
- Создать
Script.ps1
Скрипт PowerShell со следующими строками:$Process = Get-Process
$Process.ProcessorAffinity =
<шестнадцатеричная версия битового кода для соответствия процессору> - Идти к
Administrative Tools/Task Scheduler
а такжеCreate Task...
(НЕCreate Basic Task
) - Вкладка "Общие"
- Проверьте Run, если пользователь вошел в систему или нет
- Поменяйте пользователя или группу на локального пользователя на вашем компьютере
- Триггеры
- Новый...
- Включено
- Начните задание на событие
- Редактировать фильтр событий
- Используйте немного
XSLT
найти сообщение для запуска вашего сервиса. Я использовал:
<QueryList>
<Query Id="0" Path="System">
<Select Path="System">
*[EventData[Data[@Name="param1"] and (Data="
")]]
and
*[EventData[Data[@Name="param2"] and (Data="running")]]
</Select>
</Query>
</QueryList>
- действия
- Действие Запустить программу
- Программа / скрипт: PowerShell.exe
- Добавьте аргументы (необязательно): -File "path_to_script \ Script.ps1"
Это оно! Теперь каждый раз, когда ваша служба запускается, привязка будет устанавливаться в соответствии с написанным вами сценарием PowerShell.
Изменить:убедитесь, что ваш локальный пользователь имеет Debug Programs
право (Администрирование / Локальная политика безопасности / Назначение прав пользователя / Отладка программ / добавьте к этому праву вашего локального пользователя), иначе ваш пользователь не сможет изменить сходство процесса.
Посмотрите на этот пост: http://waynes-world-it.blogspot.ca/2009/06/processor-affinity-on-windows-server.html
Если вы пытаетесь управлять службой, вы можете использовать instsrv / srvany для создания службы, которая обернет команду start или psexec вокруг реального двоичного файла службы. Например, приведенные ниже команды создают другую версию службы диспетчера очереди, которая будет работать только на первом процессоре.
instsrv Test c:\util\srvany.exe reg add hklm\system\currentcontrolset\services\test\Parameters reg add hklm\system\currentcontrolset\services\test\Parameters /v Application /t reg_sz /d cmd.exe reg add hklm\system\currentcontrolset\services\test\Parameters /v AppParameters /t reg_sz /d "/c start /affinity 1 C:\WINDOWS\system32\spoolsv.exe"