添加:无需修改可执行文件本身。
尽管James回答了,但我还是找到了几乎可以完成的几种方法:
通过修改可执行文件,我可以从清单(或整个清单)中删除
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提示的两次。
评论
我曾经使用过Application Compatibility Toolkit填充程序,但这对于每个可执行文件来说都是很多工作,并且在每个文件的注册表中也会留下垃圾。这种方法有效,我更喜欢它。
– Ben Voigt
13年4月17日在21:28
接受它似乎是最直接的方法,而且我(最终!)已经能够对其进行验证。还有一个很好的属性,它可以一次性用作命令行(删除外部的“,然后将\”变成“”)。
–安德鲁·罗素(Andrew Russell)
2014年12月29日15:33
我有与@Derek相同的问题,该应用程序似乎不断向UAC索要,我不相信它具有系统范围的访问权限,但我需要它的功能。
– Gizmo
15年3月11日在22:19
通过将以下项更改为以下项,可以将其添加到注册表中,仅适用于当前登录的用户:HKEY_CURRENT_USER \ Software \ Classes * \ shell \ forcerunasinvoker和HKEY_CURRENT_USER \ Software \ Classes * \ shell \ forcerunasinvoker \ command
– GodEater
16 Mar 3 '16 at 11:36
@ jpmc26我认为/ min是错误。没有该解决方案,其工作原理完全相同。 Vom必须混合了cmd和启动开关。似乎cmd.exe没有抱怨错误的开关。例如,尝试使用cmd / whatever。
– cdlvcdlv
17年7月2日,11:50
#2 楼
保存到nonadmin.bat
:cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" %1"
现在您可以将程序拖放到此以在没有管理员的情况下运行它们。
这不需要管理员特权,就像更改该注册表项一样。同样,您也不会弄乱上下文菜单。
基于Vom的回答
更新:现在应该也可以使用名称中带有空格的程序。
评论
我在需要访问我的驱动器的某些程序上进行了尝试,但它无法检测到它们或无法正常工作:/(例如,rufus rufus.akeo.ie)
–keinabel
16年4月11日在19:04
@keinabel这可能是因为他们实际上需要管理员才能工作。该脚本适用于需要管理员特权而无需实际执行需要特权的程序。对驱动器的原始访问是一种典型的管理方式。
– Hjulle
16年4月11日在19:23
很简约!能够使用此方法安装XAMPP。
–克里希那拉(Krishnaraj)
16年8月8日在9:31
对于“ C:\ Program Files \ ...”目录中的任何可执行文件,这似乎都不适合我。我得到Windows找不到'C:\ Program'。确保正确键入了名称,然后重试。我已经几次尝试了此命令,但略有变化,没有运气。有任何想法吗?
–杰克·史密斯(Jake Smith)
16-09-30在18:09
文件在带空格的文件夹中的位置与我有同样的问题。解决了它,删除了一些双引号:cmd / min / C“ set __COMPAT_LAYER = RUNASINVOKER && start”“%1”
– ragnar
17年2月13日在17:30
#3 楼
我希望我参加聚会不是太晚,但我一直在寻找类似的问题,而在这里没有看到答案,我发现Windows内置的RunAs
命令在以管理员身份运行时可以通过/trustlevel
开关来实现。 /> 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年12月28日下午3:21
@ user1258361您必须从提升的提示符下运行此命令,就像我用黑体写的一样。
– Mxx
2014年12月28日下午4:01
在Windows 7上似乎不需要提升提示...
– SamB
2015年9月9日下午1:23
使用提升的提示进行了测试,使用了命令行runas / trustlevel:0x20000(程序),程序仍然以admin身份运行。供参考,0x20000是基本用户。
–user1258361
17年1月15日在23:21
需要提升的命令提示符...当然可以。否则,您已经没有管理员权限,开始的任何过程也将缺少它们。
–我说恢复莫妮卡
18年1月20日在2:24
#4 楼
如果您有一个特定的应用程序要始终在不使用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
“兼容垫片”。评论
一个不同但相关的问题的答案为该答案提供了灵感。
–palswim
16-9-09在20:17
非常感谢你!这是唯一对我有用的东西!我有一个从Windows上下文菜单中调用的Application,尽管总是从其他地方正确调用它,但它总是以管理员身份出现。修复之后,该应用程序开始被正确调用。
–用户
17年5月6日在17:55
#5 楼
如果它是需要管理特权的安装(安装)exe
文件,那么有一个技巧可以在没有提升访问权限的情况下运行它:如果文件名包含诸如
setup
或install
之类的单词,则Windows将以提升的访问权限强制运行该文件即使它不需要提升的访问权限,也是如此:如果.exe文件中包含清单,则这些提升的启发式方法将不适用。
例如,如果清单文件指示exe不需要提升,甚至在文件名中包含这些单词中的任何一个,都不会使其以提升状态运行。
另一个关键字是
patch
作为记录在UAC(用户帐户控制)文档中:
安装程序检测会检测安装文件,这有助于防止安装
安装程序检测仅适用于:
32位可执行文件。
没有请求的执行级别属性的应用程序。
以启用UAC的标准用户身份运行的交互式进程。
在创建32位进程之前,请检查以下属性以确定它是否为安装程序:
文件名包含诸如“安装”,“设置”或“更新”之类的关键字。
...
此处阅读模式:https://docs.microsoft.com/zh-cn/windows/security/identity-protection/user-account-control/how-user-account-control-works
评论
当然,这仅在应用程序清单未明确指定必须提升运行时有效。
–丹尼尔B
19年1月25日在11:57
@DanielB:实际上,此技巧仅在没有清单时有效
– AntoineL
19 Mar 5 '19在15:33
已投票。好观察。官方文档的链接也很好。
–丹尼斯·尼古拉连科
19年7月22日在20:25
@DenisNikolaenko Ty,添加源:)
–沙燕
19年7月22日在20:45
另一个关键字是“补丁”。只适合通过Google搜索的人。
– Mgamerz
19年11月16日在21:23
#6 楼
我今天使用MS应用程序定制工具包解决了这个问题。我遵循了一篇技术共性文章中的说明。
基本上:
1)您可以从MS这里获得工具包。
2)单击修复
3)选择RunAsInvoker选项
4)右键单击修复并选择安装
评论
您的答案与预期效果完全相反。最初的问题是如何强制要求提升特权的应用程序不提升运行。您的答案仍然使用UAC,但只是禁用了该提示。这个问题的答案是错误的。
– Mxx
2014年1月22日14:07
@mxx实际上没有。如果当前用户受到限制(或您已启用UAC),则该过程将以完全受限的特权启动。
– LogicDaemon
15年3月29日在9:54
@LogicDaemon如果您实际阅读了这篇文章,您将看到它说明,如果您按照这些步骤进行操作,则将以管理员身份运行应用程序而没有UAC提示。这与OP要求的相反。
– Mxx
15年3月29日在14:35
@mxx不。在technet上阅读RunAsInvoker实际做什么。尽管这仅适用于较旧的应用程序,但这确实是topicstarter要求的。
– LogicDaemon
2015年3月30日11:53
只要父级资源管理器,非管理员cmd或任何其他标准进程为父进程,RunAsInvoker将以相同的受限权限运行。 (默认情况下,Explorer运行受限制,否则它将永远不会要求您提升删除文件的权限。)即使对于新应用程序,它实际上似乎也可以使用。 RunAsInvoker表示它继承了完全相同的ACL令牌。
– SilverbackNet
15-10-30在5:59
#7 楼
在他的问题中,安德鲁指出以下内容无法完全发挥作用:通过修改可执行文件,我可以从
清单(或整个清单)中删除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
19年2月13日在16:33
#8 楼
我通过更改包含该程序的文件夹的权限来解决此问题。我添加了将运行该程序的每个用户,并赋予了他们“完全控制”权限。那解决了这个问题,我没有选择“以管理员身份运行”。
对于要运行该程序的用户,我没有任何安全方面的担忧。
#9 楼
不,如果程序需要UAC,则它正在尝试访问其沙箱之外的内容。如果没有提升的访问权限,该程序将无法正确运行。如果您只想摆脱通知,则可以禁用UAC。
在Windows Vista上禁用UAC:开始,输入“用户”。点击“用户帐户”。在弹出的窗口中,单击“用户帐户控制设置”,然后关闭UAC。
在Windows 7上禁用UAC:开始,键入“用户”。单击“用户帐户控制设置”。将选择栏一直拖动到底部,直到“从不通知”。
评论
禁用UAC不是我要实现的目标。另外:您对UAC的工作方式的描述仅在一般意义上是正确的。程序在严格不需要UAC时可能会请求UAC。而且,UAC发生在程序启动之前-一旦运行,一旦超出权限,它只会得到权限拒绝的错误。
–安德鲁·罗素(Andrew Russell)
2010年8月4日在14:32
除了语义之外,您不能为特定程序“禁用” UAC通知,同时仍然限制其访问权限。
–詹姆斯·瓦特(James Watt)
2010年8月4日14:47
詹姆斯:实际上-看起来可以-我已经更新了我的问题。
–安德鲁·罗素(Andrew Russell)
2010年8月4日在16:11
除了修改程序代码本身,如果您找到一个可行的解决方案,我将很想知道。
–詹姆斯·瓦特(James Watt)
2010年8月5日,下午5:17
评论
您指定不修改可执行文件,但是修改.exe是您尝试的方法之一?@ekaj我只在发现它不起作用后才指定它;)
即使您不再使用它,也可以指定该程序吗?这可能有助于人们了解需要管理员权限的尝试访问的内容
@ekaj不幸的是没有。但是,它并不特别相关:UAC由程序在过程创建期间要求提升的程序触发(通常的方式-在这种情况下-是带有清单的)。进程一旦启动,就无法更改其海拔状态-无论它尝试访问什么受限资源。
如果程序没有清单,并且拒绝以无管理员权限运行,则很可能是由于UAC安装程序检测所致。我发布了这个问题,misha256有一个很好的解决方案。我测试了一下,可以确认它是否有效。 superuser.com/questions/857616/…我进行了一些研究,发现没有理由进行安装程序检测。请注意,如果管理员特权是由于清单中的trustinfo条目引起的,显然这将不起作用。