【问题标题】:Disable UAC and notify the user禁用 UAC 并通知用户
【发布时间】:2019-01-07 11:00:19
【问题描述】:

我已经看过这样的线程:Disabling UAC programmatically 但是它们有点旧,似乎我做不到。 我正在尝试创建一个 Windows 工具来帮助用户执行某些过程(例如启用或禁用 UAC)。到目前为止,这是我的代码,即使管理员正确,它也不会调低或调高 UAC 值。现在我没有使用管理员帐户(Windows 10),但我确实可以访问本地管理员凭据。

try
        {
            RegistryKey uac = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System", true);
            if (uac == null)
            {
                uac = Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System");

            }
            uac.SetValue("EnableLUA", 0);
            uac.Close();
        }
        catch (Exception)
        {
            MessageBox.Show("Error!");
        }

【问题讨论】:

  • “它失败了” - 请阅读How to Ask 并详细说明。首先删除catch (Exception),因为它隐藏了重要信息。
  • 我很好奇:你为什么需要这样做?
  • @CodeCaster 通过在没有管理员权限的情况下删除 try catch,应用程序会崩溃,说它无权访问 reg 键。管理员正确,没有崩溃或任何事情,但它不会禁用或启用 UAC。另外我这样做只是为了学习编码,我认为 Windows 工具会是个好主意
  • 您不应该以编程方式执行此操作(旧/损坏的(vista)Windows 版本除外)
  • @EpicKip 我有一个软件可以降低 UAC 的值,然后要求用户重新启动计算机,说对 UAC 进行了更改。我的想法是复制该功能。我的意图不是要对用户隐藏它

标签: c#


【解决方案1】:

您在此处使用 Registry.CurrentUser,请改用 LocalMachine。所以代码会是这样的:

RegistryKey uac = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System", true);
                if (uac == null)
                {
                    uac = Registry.LocalMachine.CreateSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System");

                }
                uac.SetValue("EnableLUA", 0);

【讨论】:

  • 我给你的代码在我的机器上运行良好,那么在你的机器上它有什么问题,只是你需要管理员权限。正如您在 cmets 中所说,您只需在运行此代码后重新启动即可。
  • 这段代码工作得很好!非常感谢!我猜当前用户工作得很好,但我错了。干杯!
猜你喜欢
  • 1970-01-01
  • 2017-11-08
  • 1970-01-01
  • 2019-08-05
  • 2012-08-19
  • 2016-02-22
  • 2013-05-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多