[英]UnauthorizedAccessException accessing registry after setting clocks forward c#
[英]C# Registry SetValue throws UnauthorizedAccessException
在你尝试用“快速谷歌搜索”来回答这个问题之前。 我想指出的是,我已经这样做了。 这是这种情况,我有以下方法尝试修改注册表项值。 我遇到的问题是,在执行时,即使我已将密钥打开为可写,它也会抛出 UnauthorizedAccessException 。 我正在以管理员身份运行 Visual Studio,甚至试图制作一个带有清单文件的小型 .exe,迫使它以管理员身份运行,这将在没有运气的情况下执行代码。 密钥已经存在,它不会尝试进入 CreateKey 方法。 这是代码块。
Path = "S-1-5-21-1644491937-1078145449-682003330-5490\Software\Microsoft\Windows\CurrentVersion\Policies\System"
Key = "DisableTaskMgr"
NewValue = 1
public OperationResult ModifyKey()
{
OperationResult result = new OperationResult();
if (!Path.IsNullOrEmptyTrim())
{
if (!Key.IsNullOrEmptyTrim())
{
try
{
var key = Microsoft.Win32.Registry.Users.OpenSubKey(Path, true);
if (key != null)
{
key.SetValue(Key, NewValue);
key.Close();
}
else
{
result = CreateKey();
}
}
catch (Exception ex)
{
result.SetFail("Error accessing registry", ex);
}
}
else
{
result.SetFail("Registry key was null");
}
}
else
{
result.SetFail("Registry path was null");
}
return result;
}
我是否必须手动遍历注册表树,将每个 OpenSubKey 调用设置为可写? 我也试过这个,仍然抛出同样的错误......
在你的钥匙的 var 中
var key = Microsoft.Win32.Registry.Users.OpenSubKey(Path, true);
改成
var key = Microsoft.Win32.Registry.Users.OpenSubKey(Path, RegistryKeyPermissionCheck.ReadWriteSubTree);
您是否尝试过设置访问规则和权限?
string user = Environment.UserDomainName + "\\" + Environment.UserName;
RegistryAccessRule rule = new RegistryAccessRule(user,
RegistryRights.FullControl,
AccessControlType.Allow);
RegistrySecurity security = new RegistrySecurity();
security.AddAccessRule(rule);
var key = Microsoft.Win32.Registry.Users.OpenSubKey(subKeyPath, RegistryKeyPermissionCheck.ReadWriteSubTree, RegistryRights.FullControl);
key.SetAccessControl(security);
我在您的代码中看到的一个可能问题是Path
变量被设置为一个不会转义\\
字符的字符串。 怎么样:
Path = @"S-1-5-21-1644491937-1078145449-682003330-5490\Software\Microsoft\Windows\CurrentVersion\Policies\System";
作为弄清楚发生了什么的最后一搏,我创建了一个简单的服务来测试将作为本地系统帐户运行的代码。 这是我能想到的尝试运行代码的最高权限。 使用这些权限运行代码有效。
特别感谢0_ _ ___0和Charleh 也指出了防病毒软件。 我检查了日志,结果发现它试图隔离我的更改。 我想即使它也不会阻止系统用户进行这些更改。
特别感谢Sorceri帮助我研究了这么多。
总之,如果您有间歇性的、极其奇怪的行为,请检查您的病毒扫描程序和权限。
我最近遇到了同样的问题。 所以我尝试了一些事情,而不是调用key.SetValue(Key, NewValue)
简单地调用 create 函数解决了我的问题。 那是;
Microsoft.Win32.RegistryKey key1 = Microsoft.Win32.Registry.Users.CreateSubKey(Path);
key1.SetValue(Key, NewValue);
CreateSubKey 调用不会删除当前条目,但提供了无一例外的写入能力。 我希望这有帮助。
仅将授权设置为 dword。 您必须打开注册表并在最后一个文件夹路径,右键单击它并设置授予,然后选择所有应用程序并检查总控制。 我希望能帮助你。
只是Registry.SetValue(sub_key, key, value);
例子:
Registry.SetValue(
@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run",
"MyApp",
Application.ExecutablePath);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.