我有一个.bat
用于启动一些程序的文件。其中一些程序需要提升权限(即devcon
基于设备的是否存在检查),但有些则不需要。因此,我.bat
以管理员身份运行,然后使用runas
命令运行其他程序。
runas /trustlevel:0x20000 "C:\Folder\foo.exe"
runas /trustlevel:0x20000 "C:\Folder\bar.exe"
这对某些程序有效。然而,对于某些程序,它会显示此错误消息(由自己从芬兰语翻译而来,英文可能略有不同):
ERROR: Can not execute - bar.exe
740: The requested operation requires elevation.
奇怪的是,如果我创建这个.bat
:
@echo off
start "" "bar.exe"
并运行它runas
,它就像一个魔咒。它们的组合
runas /trustlevel:0x20000 "start \"\" \"C:\Folder\bar.exe\""
不起作用,因为start
不是文件。什么原因导致的?
更新:我尝试了另一个命令,并且成功了。
runas /trustlevel:0x20000 "cmd /c start \"\" \"C:\Folder\bar.exe\""
但我想知道的是不是如何让它工作但是为什么会发生这种情况。
更新 2:正如评论中所建议的那样和31415foo.exe
这是和之间的区别bar.exe
。但是,运行它们的方式肯定有区别,因为它们的结果不同;这种区别就是我所寻找的。
更新 3:我使用以下方法检查了程序的清单:资源编辑器,它们在这里。看起来它们具有相同的执行级别(asInvoker
即最低用户级别)。
上面的是bar.exe
,下面的是foo.exe
。(我知道,搞错了 :D)
更新 4:psexec
确认从提升的命令提示符也会发生这种情况:
psexec -l -i bar.exe
出现错误,
psexec -l -i cmd /C start "" "bar.exe"
作品。