以编程方式禁用UAC

时间:2009-03-25 15:47:44

标签: windows-vista uac

是否可以在Vista中以编程方式禁用UAC?或者,我可以以任何方式使我的应用程序不受UAC设置的限制吗?仅供参考,应用程序需要动态安装硬盘驱动器,这就是我每次都不能要求UAC许可的原因......

更新

我正在寻找符合Kosi2801提到的内容,基本上要求用户始终以“提升”模式启动程序。我希望权限是一次性的,我不是说我在没有先获得权限的情况下以编程方式禁用UAC。我确信有很多程序需要在这种模式下运行(尤其是与硬件相关的程序),所以应该采用某种方式来适应它。

8 个答案:

答案 0 :(得分:16)

将HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Policies \ System中的EnableLUA DWORD值设置为0并重新启动。

这将禁用UAC没有问题,我会对你的所有用户做,无论有没有权限取决于你,因为远景UAC是如此可怕,以至于我相信那些拥有它的人越少越好(仅在vista中)现在在win7中更好。

玩我的注册表技巧:)

也在win7中工作,让我知道你是如何相处的。

答案 1 :(得分:15)

您无法以编程方式禁用UAC,但可以强制程序从一开始就使用提升的权限运行,因此每次都不会提示。

这会导致它在启动时提示一次,但不会在每次需要访问时提示。

为此,您需要创建清单文件并设置<requestedExecutionLevel level="requireAdministrator">

See MSDN for details.

答案 2 :(得分:10)

UAC的目的是防止执行不需要的应用程序。如果可以以编程方式禁用它,那将毫无价值。

答案 3 :(得分:2)

我在这里发布了一个有点细化(但很难看)的解决方案

http://stackoverflow.com/questions/5344021/bypass-uac-in-vbscript/34445992#34445992

只有在您可以从任务计划程序启动应用程序时,它才有效。我在两台Windows 7笔记本电脑上运行它。这是一个行政解决方案。您需要管理员权限才能实现它。我将它用于powershell和我的UPS电源备份应用程序。我怀疑我会找到其他用途。

答案 4 :(得分:0)

以编程方式禁用UAC会破坏其目的,因为这也可能由恶意软件,蠕虫,特洛伊木马和病毒完成,并且根本没有真正的安全效果。

您可能需要在admin帐户下运行您的应用程序,或者(我认为)让Microsoft以某种方式签署您的应用程序。

我可能还有其他一些我不知道的方法,但没有一种是以编程方式!

答案 5 :(得分:0)

UAC在城市中使用信号量是一种必要的邪恶。我建议适应新的范式。我个人不喜欢UAC;但我明白了目的和好处。不幸的是,我们都创造了这个怪物。可以追溯到1983年,对这些年来的变化做一个简短的评估然后,我们会理解。当然,如果意图是供私人使用,一切皆有可能,如上所述;但这会有风险,成为黑洞的责任。

答案 6 :(得分:0)

我创建了一个小应用程序来执行此操作,但基本上您需要设置4个注册表项。

C#示例:

Microsoft.Win32.Registry.SetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System","EnableLUA", 0);

Microsoft.Win32.Registry.SetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System", "ConsentPromptBehaviorAdmin", 0);

Microsoft.Win32.Registry.SetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System", "PromptOnSecureDesktop", 0);

Microsoft.Win32.Registry.SetValue("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Action Center\\Checks\\{C8E6F269-B90A-4053-A3BE-499AFCEC98C4}.check.0", "CheckSetting", StringToByteArray("23004100430042006C006F00620000000000000000000000010000000000000000000000"), RegistryValueKind.Binary);

我的应用程序每5分钟作为一项服务运行,以“打击”组策略,这对开发人员机器来说是一个绝对的烦恼。

https://github.com/zleight1/DisableUAC

答案 7 :(得分:-1)

这会击败UAC的目标。所以不,你不能。