有没有办法配置 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]。
答案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)