C# 禁用UAC并通知用户

C# 禁用UAC并通知用户,c#,C#,我已经看过这样的线程:但是它们有点老了,似乎我做不到。 我正在尝试创建一个Windows工具来帮助用户执行认证过程(比如启用或禁用UAC)。这是我的代码,到目前为止,即使管理员是对的,它也不会降低或提高UAC值。现在我没有使用管理员帐户(Windows 10),但我可以访问本地管理员证书 try { RegistryKey uac = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows

我已经看过这样的线程:但是它们有点老了,似乎我做不到。 我正在尝试创建一个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!");
        }

您在此处使用的是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);

“它失败了”-请阅读并详细说明。首先删除
catch(Exception)
,因为它隐藏了重要信息。我很好奇:为什么需要这样做?@CodeCaster在没有管理员权限的情况下删除try-catch,应用程序就会崩溃,说它无权访问注册表项。在管理员正确的情况下,没有crahes或任何东西,但它不会禁用或启用UAC。另外,我这样做只是为了学习编码,我认为Windows工具是一个好主意。你不应该以编程方式(旧的/坏的(vista)Windows版本除外)这样做@EpicKip我有一个软件,它可以关闭UAC的值,然后让用户重新启动计算机,说对UAC进行了更改。我的想法是复制这个功能。我的意图不是要对用户隐藏我给你的代码在我的机器上运行良好,所以在你的机器上它有什么问题,只是你需要它的管理员权限。正如您在评论中所说,在运行此代码进行实现后,您只需重新启动即可。此代码运行良好!谢谢!我猜当前的用户工作得很好,但我错了。干杯