有什么方法可以强制通常需要管理员权限(通过 UAC)的程序在没有管理员权限的情况下运行?(即没有 UAC 提示和没有系统范围的访问权限。
添加:无需修改可执行文件本身。
尽管詹姆斯的回答,我还是找到了一些方法几乎做完了:
- 通过修改可执行文件,我可以
trustInfo
从清单中删除条目(或完全删除清单,这样我就可以使用外部条目),从而允许程序在没有 UAC 的情况下启动。不幸的是,这会修改可执行文件,因此由于内部校验和测试,它会在不久后退出。 - 通过使用 Process Explorer,我可以以受限用户身份启动它。但是,这似乎对它的限制比我想要的要多得多(它像受保护模式 IE 一样运行,因此可以访问的内容比我的标准未提升用户所能访问的内容少得多)。
答案1
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\shell\forcerunasinvoker]
@="Run without privilege elevation"
[HKEY_CLASSES_ROOT\*\shell\forcerunasinvoker\command]
@="cmd /min /C \"set __COMPAT_LAYER=RUNASINVOKER && start \"\" \"%1\"\""
保存此文本<name_of_file>.reg
并将其添加到 Windows 注册表中。(双击它就可以了。)
之后,右键单击您想要以非管理权限运行的应用程序,并选择“以非权限提升运行”。
在某些情况下 - 少量 0.1% 的程序可能会询问两次有关 UAC 提示。
答案2
存到nonadmin.bat
:
cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" %1"
现在,您可以将程序拖放至此处,无需管理员权限即可运行它们。
这不需要管理员权限,因为更改注册表项需要管理员权限。此外,您也不会弄乱上下文菜单。
根据 Vom 的回答
更新:现在应该也可以与名称中带有空格的程序一起使用。
答案3
我希望我没有迟到,但是我在寻找一个类似的问题,却没有看到答案,我发现RunAs
当以管理员身份运行时,Windows 的内置命令可以使用/trustlevel
switch 执行此操作。
RUNAS /trustlevel:<TrustLevel> program
/showtrustlevels displays the trust levels that can be used
as arguments to /trustlevel.
/trustlevel <Level> should be one of levels enumerated
in /showtrustlevels.
对我来说,这种方法很管用。讽刺的是,在没有提升权限的情况下明确启动一个程序需要提升的命令提示符。去想象吧。:) 我希望这对你有帮助。
答案4
exe
如果它是一个需要管理权限的安装文件,那么有一个技巧可以在没有提升访问权限的情况下运行它:
如果文件的名称包含类似的单词setup
或install
Windows 会强制以提升的访问权限运行它,即使它不需要提升的访问权限:
如果 .exe 文件中包含清单,则这些提升启发式方法不适用。
例如,如果清单表明 exe 不需要提升,即使在文件名中包含任何这些词都不会使其以提升的形式运行。
另一个关键字patch
如下姆加默兹在评论中。
UAC(用户帐户控制)文档中记录了这一点:
安装程序检测可检测安装文件,有助于防止在未经用户知情和同意的情况下运行安装。
安装程序检测仅适用于:
32 位可执行文件。
没有请求的执行级别属性的应用程序。
以启用 UAC 的标准用户身份运行的交互式进程。
在创建 32 位进程之前,将检查以下属性以确定它是否是安装程序:
文件名包含“安装”、“设置”或“更新”等关键字。
...