【问题标题】:Disabling UAC programmatically以编程方式禁用 UAC
【发布时间】:2010-10-15 11:52:16
【问题描述】:

是否可以在 Vista 中以编程方式禁用 UAC?或者,我可以让我的应用程序以任何方式不受 UAC 设置的限制吗?仅供参考,应用程序需要即时挂载硬盘,这就是为什么我不能每次都请求 UAC 权限...

更新:

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

【问题讨论】:

  • 正确的解决方案是安装一个服务来代表您执行管理员级别的任务。
  • 我创建了一个基于服务的应用程序来关闭 UAC,看看我的答案。
  • 如果你会用c#编程,你可以得到stackoverflow.com/questions/682182/…的帮助
  • UAC 是用户的偏好;不是你的。您还必须考虑禁用 UAC 并不能解决您的问题。当用户是标准用户时,程序仍然不会以管理权限运行。你必须问自己:你会在 Windows XP 上做什么?用户是标准用户,你要正确对待。

标签: windows-vista uac


【解决方案1】:

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

这将毫无问题地禁用 UAC,我会对您的所有用户执行此操作,无论是否允许由您决定,因为 vista UAC 太可怕了,我相信拥有它的人越少越好(仅在 vista 中)现在在 win7 中更好。

玩我的注册表技巧:)

在win7下也可以,请告诉我你是如何使用它的。

【讨论】:

  • UAC 实际上在几个方面被破坏了。我可以理解为什么在启用 UAC 时,一些原本正确的程序会严重失败。
  • +1 的窍门,但 UAC 是否会让我们修改 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System 中的注册表值而不警告接收端的用户?
  • 好吧,只要您在管理员下运行程序 (exe)(即运行应用程序的人已接受以管理员身份运行它),那么您实际上可以在不告知用户任何内容的情况下执行注册表技巧,在 VISTA 中,在 Win7 中,您仍然可以执行此操作,但用户会收到通知说“您需要重新启动计算机才能使 UAC 生效” - 这不会中断进程,只是向用户暗示发生了禁用...但是如果您愿意,您也可以使用另一个注册表技巧来关闭该消息 :),因此,只要以管理员身份运行,它就始终“有效”。
  • 为整个计算机全局禁用 UAC 只是为了让单个应用程序更容易解决一个(可避免的)问题?为什么不只是卸载所有的病毒扫描程序,因为警告你太频繁了?在我看来,降低安全性以增强可用性从来都不是解决方案。
  • 我认为这在技术上是正确的答案,但是我不建议任何人使用这种方法,因为它几乎违背了其他人在此处所述的 UAC 的目的。如果您在自己/内部/公司环境中进行,可能没问题...
【解决方案2】:

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

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

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

See MSDN for details.

【讨论】:

  • 嗨 Reed,我正在制作一个运行 ServiceModelReg.exe 的安装程序(具有上述权限),但它以错误结束......而运行它时需要从控制面板手动提升权限...... . 一切正常
  • 阅读我的回答,只要您在管理员权限下运行,就可以禁用 UAC!
  • @Erx_VB.NExT.Coder:不过,这会强制重启。这不是我所说的程序更改,而是配置更改。这真的没有帮助,因为在这种情况下用户可以只更改系统配置。
  • 我很生气,每个人都说禁用 UAC 是不可能的,而事实上这根本不是真的。错误信息是问题所在。如果您处于管理员或提升模式(大多数正在运行的应用程序是),您可以使用注册表禁用 uac。
  • @Erx_VB.NExT.Coder:您可以为整个用户帐户执行此操作(前提是您具有提升的权限),但不适用于特定操作/进程。它还需要提升权限(即:UAC 提示)才能执行...
【解决方案3】:

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

【讨论】:

  • 嗯,有可能,只要您以管理员身份运行。
【解决方案4】:

我在这里发布了一个有点精细(但丑陋)的解决方案

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

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

【讨论】:

  • 负面评价有什么特别的原因吗?我的解决方案以我见过的其他任何地方都没有发布的方式禁用 UAC。这是我 3 年来一直在尝试解决的问题。该解决方案有效。
【解决方案5】:

我为此创建了一个小应用程序,但基本上需要设置 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

【讨论】:

    【解决方案6】:

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

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

    可能还有其他我不知道的方式,但它们都不是编程方式!

    【讨论】:

    • 当然,只要您在管理员权限下运行该程序,您就可以禁用 UAC 以及与之相关的任何随附消息!
    • 由于该问题与当前以受限方式启动应用程序有关,因此在这种情况下是不可能的。当然,正如我也说过的,要求它以管理员权限启动就可以了。而且因为每次答案仍然适用时,它不应该手动发生。因此,正确选择了公认的答案,即如何自动启动提升模式。
    • 我相信我的答案已更新为正确答案,当他们询问如何摆脱 uac 问题时,正确选择了正确答案,这就是它的作用。最后的手段我同意,但它是准确的。他将接受的答案更改为我的答案。
    【解决方案7】:

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

    【讨论】:

      【解决方案8】:

      这将打败 UAC 的对象。所以不,你不能。

      【讨论】:

      • 因为,如果可以的话,拥有它是没有意义的。
      猜你喜欢
      • 2014-12-02
      • 2013-07-06
      • 1970-01-01
      • 2013-02-17
      • 1970-01-01
      • 1970-01-01
      • 2011-08-11
      • 1970-01-01
      • 2011-01-23
      相关资源
      最近更新 更多