如何配置 Windows 服务进程以低优先级运行?

owl*_*prt 18 windows

有没有办法将 Windows 服务进程(例如 squidNT、SQL Server 等)配置为以低优先级自动启动,而无需通过任务管理器手动更改进程优先级?

Eva*_*son 12

处理启动/停止服务的服务控制管理器没有任何机制(在迄今为止的任何版本的 Windows 中)来指定它启动的进程的优先级。

由于您可以修改已经运行的进程的优先级,因此最好的办法可能是使用工具来做到这一点。

我不知道 Microsoft 命令行工具可以修改进程优先级,但是http://www.teamcti.com/pview/prcview.htm上的“PV”命令行也有设置优先级的功能.

pv -pb process-name.exe
Run Code Online (Sandbox Code Playgroud)

这会将“process-name.exe”设置为“Below Normal”优先级。

如果您可以忍受以“正常”优先级开始的流程,直到您开始更改它,那么您可以使用作为“计划任务”运行的脚本来做到这一点,以经常触发(以防服务反弹)。

这是一个快速而肮脏的黑客,但我一生中的很多财富都归功于完成工作的快速而肮脏的黑客!


cez*_*tko 5

以上答案对我不起作用。我结束了创建以下 powershell 脚本:

更改优先级.ps1

Get-WmiObject Win32_process -Filter 'name="ProcessName.exe"' | ForEach-Object {$_.SetPriority(128)}
Run Code Online (Sandbox Code Playgroud)

然后我创建了一个计划任务,每 5 分钟调用一次。从管理员提示符或批处理脚本:

schtasks /Create /tn "Process Priority Change" /sc MINUTE /mo 5 /ru SYSTEM /tr "powershell -noprofile -executionpolicy bypass -file \"%cd%\ChangePriority.ps1\""
Run Code Online (Sandbox Code Playgroud)

尝试按照此处wmic讨论的方式使用以使计划任务不依赖于文件失败。与使用 powershell 脚本类似:我无法创建一个仅使用内联脚本创建任务的命令。如果您设法做到这一点并添加另一个答案,我们将不胜感激。

powershell 脚本中的优先级值可以在此处找到[1]。

[1] https://docs.microsoft.com/en-us/windows/desktop/cimwin32prov/setpriority-method-in-class-win32-process