在Vista中,是否有可能以编程方式禁用UAC?或者,我可以以任何方式使我的应用程序在UAC设置下无限制地运行吗?FYI,该应用程序需要动态挂载硬盘,这就是为什么我不能每次询问UAC权限的原因...
更新:
我正在寻找类似于Kosi2801提到的东西,基本上是要求用户始终以“提升的”模式启动程序。我希望权限只需一次性获取,我并不是说可以在未经允许的情况下以编程方式禁用UAC。我相信有很多需要以此模式运行的程序(特别是硬件相关的程序),因此应该有某种方法来容纳它。
在Vista中,是否有可能以编程方式禁用UAC?或者,我可以以任何方式使我的应用程序在UAC设置下无限制地运行吗?FYI,该应用程序需要动态挂载硬盘,这就是为什么我不能每次询问UAC权限的原因...
更新:
我正在寻找类似于Kosi2801提到的东西,基本上是要求用户始终以“提升的”模式启动程序。我希望权限只需一次性获取,我并不是说可以在未经允许的情况下以编程方式禁用UAC。我相信有很多需要以此模式运行的程序(特别是硬件相关的程序),因此应该有某种方法来容纳它。
EnableLUA
的DWORD
值设置为0
,然后重新启动。HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
<requestedExecutionLevel level="requireAdministrator" uiAccess="false">
UAC的目的是防止执行不需要的应用程序。如果可以通过编程方式禁用它,那么它就没有价值了。
我在这里发布了一个有点细节化(但很丑)的解决方案。
http://stackoverflow.com/questions/5344021/bypass-uac-in-vbscript/34445992#34445992
只有在任务计划程序中启动应用程序时才能起作用。我已经在两台Windows 7笔记本电脑上运行它。这是一种管理解决方案。你需要管理员特权来实施它。我用它来处理powershell和我的UPS电源备份应用程序。我怀疑我会发现其他用途。
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);
以编程方式禁用UAC将会破坏其目的,因为这样也可以被恶意软件、蠕虫、木马和病毒所做,并且根本没有真正的安全效果。
您可以要求在管理员帐户下运行您的应用程序或(我认为)让Microsoft以某种方式签署您的应用程序。
可能还有其他我不知道的方法,但它们都不能以编程方式实现!
用户账户控制(UAC)就像城市里使用信号量一样是必要的邪恶。我建议适应新的范式。我个人不喜欢UAC,但我理解其目的和好处。不幸的是,我们都创造了这个怪物。让我们回到1983年,简要评估这些年来的变化,然后我们就会理解。当然,如果意图是私人使用,如上所述,任何事情都有可能,但这将是有风险的并成为一个黑洞责任。
这会违背用户账户控制(UAC)的初衷。所以,不能这样做。