强制程序在*没有*管理员权限或 UAC 的情况下运行?

And*_*ell 140 windows uac administrator

有什么方法可以强制通常需要管理员权限(通过 UAC)的程序在没有管理员权限的情况下运行?(即:没有 UAC 提示和没有系统范围的访问权限。)

补充:不修改可执行文件本身。


尽管詹姆斯给出了答案,但我发现了几种几乎可以做到的方法:

  1. 通过修改可执行文件,我可以trustInfo从清单(或整个清单,因此我可以使用外部清单)中删除条目,从而允许程序在没有 UAC 的情况下启动。不幸的是,这会修改可执行文件,因此由于内部校验和测试,它很快就会退出。
  2. 通过使用 Process Explorer,我可以以受限用户身份启动它。然而,这似乎对它的限制比我想要的要多得多(它像保护模式 IE 一样运行,因此可以访问的内容远少于我的标准未提升用户所能访问的内容)。

小智 92

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\"\""
Run Code Online (Sandbox Code Playgroud)

保存此文本<name_of_file>.reg并将其添加到 Windows 注册表中。(双击它应该可以解决问题。)

然后,右键单击您要在没有管理权限的情况下运行的应用程序,然后选择“无需提升权限即可运行”。

在某些情况下 - 少量 0.1% 的程序可能会两次询问 UAC 提示。

  • 我曾经使用 Application Compatibility Toolkit shim,但这对每个可执行文件来说都是大量的工作,并且在注册表中为每个文件留下了垃圾。这种方法有效,我更喜欢它。 (2认同)
  • 接受它,因为它似乎是最直接的方法,我(*终于!*)能够验证它。还具有非常好的特性,可以简单地用作一次性命令行(删除外部的 `"`,然后将 `\"` 变成 `"`)。 (2认同)
  • 您可以通过将键更改为:HKEY_CURRENT_USER\Software\Classes\*\shell\forcerunasinvoker 和 HKEY_CURRENT_USER\Software\Classes\*\shell\forcerunasinvoker\command 将其添加到仅当前登录用户的注册表中 (2认同)

Hju*_*lle 66

保存到nonadmin.bat

cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" %1"
Run Code Online (Sandbox Code Playgroud)

现在,您可以将程序拖放到此处以在没有管理员的情况下运行它们。

这不需要像更改该注册表项那样具有管理员权限。你也不会弄乱上下文菜单。

基于 Vom 的回答


更新:现在应该可以与名称中包含空格的程序一起使用。

  • @keinabel 那可能是因为他们实际上需要管理员才能工作。此脚本适用于需要管理员权限而不实际执行需要它的操作的程序。对驱动器的原始访问是典型的管理事务。 (9认同)
  • 漂亮整齐!能够使用这种方法安装 XAMPP。 (2认同)

Mxx*_*Mxx 36

我希望我参加聚会还不算太晚,但我一直在寻找类似的问题,但在这里没有看到答案,我发现 Windows 的内置RunAs命令在以管理员身份运行时可以通过/trustlevelswitch 来完成。

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.
Run Code Online (Sandbox Code Playgroud)

这在我的情况下有效。具有讽刺意味的是,在没有提升的情况下显式启动程序需要提升的命令提示符。去搞清楚。:) 希望对你有帮助。

  • @user1258361 你必须从提升的提示符运行这个命令,就像我用粗体写的一样...... (10认同)
  • 使用提升的提示进行测试,使用命令行 runas /trustlevel:0x20000(程序),无论如何程序都以管理员身份运行。作为参考,0x20000 是基本用户。 (4认同)
  • *需要提升的命令提示符*...当然可以。否则,您 ** 已经** 没有管理员权限,并且您启动的任何进程也将缺少管理员权限。 (2认同)

pal*_*wim 26

如果您希望始终在没有 UAC 的情况下运行某个特定应用程序,您可以使用注册表将其作为目标(将文本添加到 REG 文件并将其导入注册表):

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"C:\\example\\application.exe"="RunAsInvoker"
Run Code Online (Sandbox Code Playgroud)

与此答案不同,此解决方案不需要替代单击或更改用户交互。

微软称这个过程添加了RunAsInvoker “兼容性垫片”

  • 非常感谢!这是唯一对我有用的东西!我有一个从 Windows 上下文菜单中调用的应用程序,它总是以管理员身份出现,尽管它从其他地方被正确调用。在此修复后,应用程序开始被正确调用。 (3认同)

Sha*_*yan 5

如果它exe是需要管理权限的设置(安装)文件,则有一个技巧可以在没有提升访问权限的情况下运行它:

如果文件的名称包含类似setupinstallwindows 之类的词,即使它不需要提升访问权限,也会强制使用提升访问权限运行它:

在此处输入图片说明

如果 .exe 文件中包含清单,则这些提升启发式方法不适用。

例如,如果清单表明 exe 不需要提升,即使在文件名中包含这些词中的任何一个也不会使它以提升的方式运行。

另一个关键字patchMgamerz在评论中所述。

这记录在 UAC(用户帐户控制)文档中:

安装程序检测会检测安装文件,这有助于防止在用户不知情和同意的情况下运行安装。

安装程序检测仅适用于:

  • 32 位可执行文件。

  • 没有请求的执行级别属性的应用程序。

  • 作为启用 UAC 的标准用户运行的交互式进程。

在创建 32 位进程之前,会检查以下属性以确定它是否为安装程序:

  • 文件名包括诸如“安装”、“设置”或“更新”之类的关键字。

  • ...

阅读模式在这里:https : //docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works

  • @DanielB:事实上,这个技巧只有在没有清单时才有效 (3认同)
  • 当然,这仅在应用程序清单未明确指定它必须运行提升时才有效。 (2认同)

归档时间:

查看次数:

603304 次

最近记录:

4 年,6 月 前