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

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

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

答案1

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

由于您可以修改已经运行的进程的优先级,因此最好的选择可能是使用工具来执行此操作。

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

pv -pb process-name.exe

这会将“process-name.exe”设置为“低于正常”优先级。

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

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

答案2

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

更改优先级.ps1

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

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

schtasks /Create /tn "Process Priority Change" /sc MINUTE /mo 5 /ru SYSTEM /tr "powershell -noprofile -executionpolicy bypass -file \"%cd%\ChangePriority.ps1\""

尝试使用wmic讨论的内容这里使计划任务不依赖于文件失败。使用 powershell 脚本也类似:我无法只创建一个命令,该命令只使用内联脚本创建任务。如果您成功做到这一点并添加另一个答案,我将不胜感激。

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

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

答案3

以下方法也可能有效。编辑 ImagePath 注册表项,然后使用 cmd.exe 中的启动命令:

START ["title"] [/Dpath] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
      [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
      [/WAIT] [/B] [command/program]
      [parameters]

答案4

您可以使用以下 powershell 脚本,将其放入启动时运行的计划任务中。

do {
    start-sleep -s 5
    $obj = Get-WmiObject Win32_process -Filter 'name="processname"'
} while ($obj -eq $null)
$obj.SetPriority(16384)

相关内容