如何创建快捷方式让Windows程序获realtime优先级且非管理员运行
实现非管理员身份程序以实时优先级启动的快捷方案
核心思路
要同时满足「设置实时优先级(需管理员权限)」和「程序不以管理员身份运行」,需要分离权限:用管理员权限的中间进程(PowerShell)完成优先级设置操作,而目标程序以普通用户身份启动。
具体步骤
1. 创建PowerShell脚本
将以下代码保存为LaunchWithRealtime.ps1(替换"C:\Your\App\Path.exe"为目标程序的完整路径):
$targetApp = "C:\Your\App\Path.exe" $appName = (Get-Item $targetApp).BaseName # 以当前普通用户身份启动目标程序 Start-Process runas -ArgumentList "/user:$env:USERNAME `"$targetApp`"" -NoNewWindow # 短暂等待程序启动(可根据程序启动速度调整秒数) Start-Sleep -Seconds 2 # 找到目标进程并设置实时优先级 $targetProcess = Get-Process -Name $appName -ErrorAction SilentlyContinue if ($targetProcess) { $targetProcess.PriorityClass = [System.Diagnostics.ProcessPriorityClass]::RealTime }
2. 创建带管理员权限的快捷方式
- 右键桌面 → 新建 → 快捷方式
- 在「位置」输入框中填入:
powershell.exe -ExecutionPolicy Bypass -File "C:\Path\To\Your\LaunchWithRealtime.ps1"
- 命名快捷方式后,右键点击它 → 属性 → 切换到「快捷方式」标签页 → 点击「高级」按钮
- 勾选「以管理员身份运行」,依次点击确定保存设置
为什么之前的方法无效?
- 直接使用
start /realtime:启动程序会继承管理员身份,违反「绝不以管理员运行」的要求 runas前置的方案:runas启动的start进程是普通权限,无法设置实时优先级,只能到High级别__COMPAT_LAYER=RUNASINVOKER:若父进程已为管理员身份,该兼容性层变量无法生效,程序仍会以管理员权限运行
内容的提问来源于stack exchange,提问作者mmlac
相关产品推荐
相关产品推荐

