我创建了一个 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/