c# - 以编程方式禁用 UAC - 更改不会生效?

标签 c# registry admin uac

我创建了一个 C# 应用程序,将“EnableLUA”键更改为 0, 该应用程序以管理员权限运行,并且没有弹出错误:

//Runs with admin rights
try 
{
RegistryKey key = 
Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System", true);
            key.SetValue("EnableLUA", "0");
            key.Close();
}
catch(Exception e)
{
    MessageBox.Show("Error: " + e);
}

注册表项确实从 1 更改为 0,但即使在重新启动计算机后, UAC 仍然启用。然后,当我转到“控制面板”>“用户帐户控制”时, slider 一直向下转动。当按下“保存”(并且没有修改任何东西)时,UAC 突然似乎被禁用了。

这会是某种错误还是只是一种奇怪的安全措施?有什么办法解决这个问题吗?

最佳答案

UAC 无法以编程方式禁用,它旨在防止此类行为。 UAC 的全部意义在于,除了用户交互之外,其他任何事情都不可能绕过/禁用它。

当然,您可以将注册表项设置为 0,并且您可以看到 slider 移动,但除非用户实际上是导致该操作的用户(使用 OK 提交)它不会更新。

UAC 在操作系统的低级别运行,您的代码必须在内核级别运行才能禁用 UAC,以管理员身份运行是不够的。现代 bios 中的 Execute Disable Bit 将阻止您的代码使用任何类型的方法(例如缓冲区溢出)注入(inject)内核

更好的解决方案是检测 UAC 是否启用并指导用户如何关闭它。

除非你想做一些非常古怪的事情,比如以编程方式打开屏幕以禁用 uac 并模拟鼠标输入以将 slider 向下单击到无并单击确定。

关于c# - 以编程方式禁用 UAC - 更改不会生效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26238779/

相关文章:

python - Debian 上的 Django 管理目录

c# - StringBuilder 初始化程序在 VS2015 中以一种方式工作,但在 VS2013 中以另一种方式工作

c++ - 如何从 Windows 注册表中读取值

c# - 修改 Windows 登录屏幕

c# - 在 .net core 和 .net Framework 中搜索给出不同输出的注册表项

checkbox - 将默认选中的 Wix 复选框值保存到注册表

django - 自定义 Django Admin 用户密码修改表单

php - WordPress - 作者下拉列表/屏幕选项未显示在管理中 - 需要解决方法

c# - 允许用户在 Razor 中自定义 HTML

C# Windows Phone 8.1 语言选择