如何将CMD提权为管理员并在同一实例运行Batch批处理文件
错误原因
原命令中|管道符的作用是将前序命令的输出传递给后序命令作为输入,无法实现「让提权启动的cmd执行指定bat文件」的需求,因此会出现高权限cmd窗口弹出,但bat文件仍在原低权限进程中运行的问题。
修正方案
方案1:直接修改外部调用的PowerShell命令
将原有命令替换为以下内容即可:powershell -Command "Start-Process cmd -Verb RunAs -ArgumentList '/c c:\users\T\Desktop\output.bat'"
参数说明:
-ArgumentList用于向启动的目标程序传递运行参数,/c表示cmd执行完bat文件后自动关闭窗口,若需要保留窗口可将/c改为/k- 所有需要高权限cmd执行的参数必须放在该配置项内,不能通过管道符拼接
方案2:给bat文件添加自提权逻辑
如果希望bat文件本身运行时自动申请管理员权限,无需外部调用时额外配置参数,可直接在output.bat的最开头添加以下代码:
@echo off :: 权限校验,无管理员权限则自动提权 fltmc >nul 2>&1 || (powershell start -verb runas '%~0' &exit /b) :: 以下为原有bat的注册表编辑代码
逻辑说明:
fltmc是只有管理员权限可正常执行的系统命令,执行失败即代表当前为低权限环境%~0是系统内置变量,指代当前bat文件的完整路径,提权后会重新以管理员身份运行当前bat,同时退出原低权限进程
内容的提问来源于stack exchange,提问作者Trent Koch
相关产品推荐
相关产品推荐

