我创建了一个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仍然启用。然后,当我去控制面板>用户帐户控制,滑块完全关闭。按"保存" (并没有修改任何东西),UAC似乎突然被禁用了。
这会是某种类型的错误还是仅仅是一种奇怪的安全问题?有没有办法解决这个问题?
答案 0 :(得分:3)
UAC无法以编程方式禁用,它旨在防止此类行为。 UAC的全部意义在于,除了用户交互之外的任何事情都不可能绕过/禁用它。
当然,您可以将注册表项设置为0,并且可以看到滑块已移动,但除非用户实际上是导致该操作的用户(以OK方式提交),否则它将不会更新。
UAC在操作系统的低级别运行,您的代码必须在内核级别运行才能禁用UAC,因为管理员运行不够。现代bios中的Execute Disable Bit将阻止您的代码以任何方式注入内核(例如缓冲区溢出)
更好的解决方案是检测UAC是否已启用,并指导用户如何将其关闭。
除非你想做一些非常古怪的事情,比如以编程方式打开屏幕以禁用uac并模拟鼠标输入,将滑块单击为无,然后单击“确定”。
答案 1 :(得分:1)
您可以通过编写两行代码
来删除UAC提示string UAC_key = @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System";
Registry.SetValue(UAC_key, "EnableLUA", 0);`
答案 2 :(得分:0)
此版本有效:
参考:
using System.Management.Automation;
代码:
var script = PowerShell.Create();
script.AddScript("Set-ItemProperty \"HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System\" -Name \"ConsentPromptBehaviorAdmin\" -Value \"0\" ");
script.Invoke();
答案 3 :(得分:0)
您正在将 32 位 DWORD 更改为字符串值,因此它不起作用
绝对有可能禁用 uac,如果您只是将 valuekind 指定为这样的双字
key.SetValue("EnableLUA", "0", RegistryValueKind.DWord);
注意你还需要以管理员身份运行程序才能访问regedit中的hklm(HKEY_LOCAL_MACHINE)
在 windows 10 中测试过,它可以工作,我不知道它是否可以在 win7 中运行,但如果可以,请告诉我