Я бы хотел установить Affinity
и Priority
сервисного процесса при его запуске (без изменяя код услуги / процесса, я не владеете кодом, это сторонняя служба).
Я знаю, что могу:
$Process = Get-Process MyService
$Process.ProcessorAffinity = 4
в PowerShell изменить Affinity
процесса или префикс пути к команде с:
cmd.exe /c start "Some Process Name" /affinity 4
Тем не мение, ни то, ни другое из них применимы к изменению Affinity
и Priority
процесса обслуживания автоматически каждый раз сервис запущен) Как это сделать без используя какое-то стороннее приложение, которое `` поддерживает '' сходство процессов при перезапуске (я бы действительно люблю писать / создавать решение самостоятельно и не полагаться на еще одно приложение для «настройки» окон).
Взгляните на этот пост: 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"
Хорошо, я построил комментарий @ Art.Vandelay05, и вот (ИМХО большинство интуитивно понятный) решение.
Script.ps1
Сценарий PowerShell со следующими строками:$Process = Get-Process
<service_process_exe_name_WITHOUT_the_exe>$Process.ProcessorAffinity =
<шестнадцатеричная версия битового кода для соответствия процессору>Administrative Tools/Task Scheduler
и Create Task...
(НЕ Create Basic Task
)XSLT
чтобы найти сообщение для запуска вашей службы. Я использовал:<QueryList>
<Query Id="0" Path="System">
<Select Path="System">
*[EventData[Data[@Name="param1"] and (Data="
<your_service_name> ")]]
and
*[EventData[Data[@Name="param2"] and (Data="running")]]
</Select>
</Query>
</QueryList>
Это оно! Теперь каждый раз, когда ваша служба запускается, привязка будет устанавливаться в соответствии с написанным вами сценарием PowerShell.
Редактировать: Делать конечно у вашего локального пользователя есть Debug Programs
право (Администрирование / Локальная политика безопасности / Назначение прав пользователей / Отладка программ / добавьте в это право вашего локального пользователя) или вашего пользователя не будет иметь возможность изменять привязку процесса.