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


122

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

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


尽管有詹姆斯的回答,我还是找到了几乎可以做到的几种方法:

  1. 通过修改可执行文件,我可以trustInfo从清单中删除条目(或完全删除清单,因此可以使用外部条目),从而使程序无需UAC即可启动。不幸的是,这会修改可执行文件,因此由于内部校验和测试而很快退出。
  2. 通过使用Process Explorer,我可以以受限用户身份启动它。但是,这似乎极大地限制了它(它像保护模式IE一样运行,因此可以访问的数量大大少于我的标准未提升用户的访问权限)。

1
您指定不修改可执行文件,但是修改.exe是您尝试的方法之一?
cutrightjm 2012年

3
@ekaj我只指定我发现这行不通之后;)
Andrew Russell

即使您不再使用它,也可以指定该程序吗?这可能有助于人们了解它正在尝试访问的具有管理员权限的内容
cutrightjm 2012年

@ekaj不幸的是没有。但是,它并不特别相关:UAC由程序在过程创建期间要求提升的程序触发(通常的方式-在这种情况下-是带有清单的)。流程一旦启动,就无法更改其海拔状态-无论它尝试访问什么受限资源。
安德鲁·罗素

如果程序没有清单,并且拒绝以无管理员权限运行,则很可能是由于UAC安装程序检测所致。我发布了这个问题,misha256有一个很好的解决方案。我对其进行了测试,可以确认它是否有效。superuser.com/questions/857616/…我做了一些研究,发现没有理由存在安装程序检测。请注意,如果管理员特权是由于清单中的trustinfo条目引起的,则显然这将不起作用。
user1258361 2014年

Answers:


74
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提示的问题。


1
我曾经使用过Application Compatibility Toolkit填充程序,但是对于每个可执行文件来说,这都是很多工作,并且在每个文件的注册表中也会留下垃圾。这种方法有效,我更喜欢它。
Ben Voigt

2
接受它似乎是最直接的方法,我(终于!)已经能够对其进行验证。还具有一个非常好的属性,它可以一次性用作命令行(删除外部",然后\"变成")。
Andrew Russell

1
我作为@Derek,应用程序似乎一直保持再询问UAC同样的问题,我不跟全系统获得信任,但我需要它的功能..
小发明

1
通过将以下项更改为以下项,可以将其添加到注册表中,仅用于当前登录的用户:HKEY_CURRENT_USER \ Software \ Classes * \ shell \ forcerunasinvoker和HKEY_CURRENT_USER \ Software \ Classes * \ shell \ forcerunasinvoker \ command
GodEater

1
@ jpmc26我认为这/min是一个错误。没有该解决方案,其工作原理完全相同。Vom必须混在一起cmdstart切换。似乎cmd.exe并没有抱怨错误的开关。cmd /whatever例如,尝试。
cdlvcdlv

53

保存到nonadmin.bat

cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" %1"

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

不需要像更改该注册表项那样的管理员特权。同样,您不会使上下文菜单混乱。

根据Vom的答案


更新:现在应该也可以使用名称中带有空格的程序。


我在需要访问我的驱动器的某些程序上尝试过它,但它无法检测到它们或根本无法工作:/(例如rufus rufus.akeo.ie
keinabel

7
@keinabel这可能是因为他们实际上需要管理员才能工作。该脚本适用于需要管理员特权而无需实际执行需要特权的程序。对驱动器的原始访问是一种典型的管理方式。
Hjulle

2
漂亮整齐!能够使用此方法安装XAMPP。
克里希那拉

对于“ C:\ Program Files \ ...”目录中的任何可执行文件,这似乎都不适合我。我得到一个Windows cannot find 'C:\Program'. Make sure you typed the name correctly, and then try again。我已经几次尝试了此命令,但略有变化,没有运气。有任何想法吗?
杰克·史密斯

1
文件在带空格的文件夹中的位置与我有同样的问题。解决了它删除了一些双引号:cmd / min / C“ set __COMPAT_LAYER = RUNASINVOKER && start”“%1”
ragnar

35

我希望我参加聚会的时间不会太晚,但是我一直在寻找类似的问题,而在这里没有看到答案,我发现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.

就我而言,这是可行的。具有讽刺意味的是,显式地启动程序而无需提升权限,则需要提升的命令提示符。去搞清楚。:)希望对您有帮助。


我可以确认这不起作用。我刚刚对其进行了测试,并收到一个错误:“ RUNAS错误:无法运行-(此处为程序名称)。请求的操作需要提升”。
user1258361 2014年

9
@ user1258361,您必须从提升的提示符下运行此命令,就像我用粗体写的一样……
Mxx 2014年

在Windows 7上似乎不需要提升的提示……
SamB

4
用提升的提示进行测试,使用命令行运行方式/ trustlevel:0x20000(程序),程序仍然以admin身份运行。供参考,0x20000是基本用户。
user1258361

2
需要提升的命令提示符 ...当然可以。否则,您已经没有管理员权限,开始的任何过程也将缺少它们。
Twisty模仿者

16

如果您有一个特定的应用程序要始终在不使用UAC的情况下运行,则可以将其定位为注册表(将文本添加到REG文件并将其导入到注册表中):

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"C:\\example\\application.exe"="RunAsInvoker"

与该答案不同,此解决方案不需要其他点击或更改用户交互。

Microsoft称此过程为RunAsInvoker “ Compatibility Shim”


一个不同但相关的问题的答案为该答案提供了灵感。
palswim's

1
非常感谢你!这是唯一对我有用的东西!我有一个从Windows上下文菜单中调用的Application,尽管总是从其他地方正确调用它,但它总是以管理员身份出现。修复之后,该应用程序开始被正确调用。
用户

3

我今天使用MS应用程序定制工具包解决了这个问题。

我遵循了一篇关于技术共和国的文章中的指示。

基本上:

1)您可以从MS 这里获得工具包。

2)点击修复

3)选择RunAsInvoker选项

4)右键单击该修复程序,然后选择“安装”


您的答案与预期效果完全相反。最初的问题是如何强制要求提升特权的应用程序不提升运行。您的答案仍然使用UAC,但只是禁用了该提示。这个问题的答案是错误的。
Mxx 2014年

@mxx实际上没有。如果当前用户受到限制(或者您已启用UAC),则该过程将以完全受限的特权启动。
LogicDaemon

1
@LogicDaemon如果您实际阅读了这篇文章,您将看到它说明,如果按照这些步骤进行操作,则您将以管理员身份运行应用程序而不会出现UAC提示。这与OP要求的相反。
Mxx

@mxx不。在technet上阅读RunAsInvoker实际做什么。尽管这仅适用于较旧的应用程序,但这确实是topicstarter要求的。
LogicDaemon

只要父资源管理器,非管理员cmd或任何其他标准进程为父进程,RunAsInvoker将以相同的受限权限运行。(默认情况下,Explorer运行受限制,否则它将永远不会要求您提升删除文件的权限。)即使使用新应用程序,它实际上似乎也可以使用。RunAsInvoker表示它继承了完全相同的ACL令牌。
SilverbackNet

3

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

如果文件名包含setup或之类的单词,install则即使Windows不需要提升访问权限,Windows也会强制以提升访问权限运行该文件:

在此处输入图片说明

如果.exe文件中包含清单,则这些高程试探法不适用。

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

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

安装程序检测仅适用于:

  • 32位可执行文件。

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

  • 启用了UAC且以标准用户身份运行的交互式进程。

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

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

  • ...

读取模式在这里:https : //docs.microsoft.com/zh-cn/windows/security/identity-protection/user-account-control/how-user-account-control-works


2
当然,这仅在应用程序清单未明确指定必须提升运行时有效。
Daniel B

3
@DanielB:实际上,此技巧仅在没有明显
证据

1
已投票。好观察。官方文档的链接也很好。
Denis Nikolaenko

@DenisNikolaenko Ty,添加来源:)
Shayan

1

在他的问题中,安德鲁指出以下内容不太有效:

通过修改可执行文件,我可以从清单(或整个清单,因此可以使用外部清单)中删除trustInfo条目,从而允许程序在不使用UAC的情况下启动。不幸的是,这会修改可执行文件,因此由于内部校验和测试而很快退出。

我能够为正在使用的软件修改外部.manifest文件并进行更改

<ms_asmv2:requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

<ms_asmv2:requestedExecutionLevel level="asInvoker" uiAccess="false" />

原来我所使用的软件实际上并不需要管理员权限,因此我可以在没有UAC或管理员密码的情况下以标准用户帐户运行该软件。谢谢!


相反,编辑可执行文件可能会更容易,因为清单可能只是包含在文件中。注意,名称空间前缀ms_asmv2:也可能被省略。另外,更改嵌入式xml块的大小可能会破坏二进制文件,因此应将“ requireAdministrator”更改为“ asInvoker”,并在uiAccess之前用空格填充相同的长度。
kdb

-2

我通过更改包含该程序的文件夹的权限来解决此问题。

我添加了将运行该程序的每个用户,并为他们提供了“完全控制”特权。那解决了这个问题,我没有选择“以管理员身份运行”。

对于将要运行该程序的用户,我没有任何安全方面的考虑。


-5

不,如果程序需要UAC,则它将尝试访问其沙箱之外的内容。如果没有提升的访问权限,该程序将无法正确运行。

如果您只是想摆脱通知,可以禁用UAC。

在Windows Vista上禁用UAC:开始,键入“用户”。点击“用户帐户”。在弹出的窗口中,单击“用户帐户控制设置”,然后关闭UAC。

在Windows 7上禁用UAC:启动,键入“用户”。单击“用户帐户控制设置”。将选择栏一直拖动到底部,直到“从不通知”。


7
禁用UAC不是我要实现的目标。另外:您对UAC的工作方式的描述仅在一般意义上是正确的。当程序严格不需要UAC时,它可能会请求UAC。而且,UAC发生在程序启动之前-一旦运行,一旦程序超出其权限,它只会得到权限拒绝的错误。
安德鲁·罗素

除了语义之外,您不能为特定程序“禁用” UAC通知,同时仍然限制其访问权限。
詹姆斯·瓦特

詹姆斯:实际上-看起来可以-我已经更新了我的问题。
安德鲁·罗素

除了修改程序代码本身,如果您找到一个可行的解决方案,我将很想知道。
詹姆斯·瓦特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.