1

我正在使用 Visual C# 2010 并且在设置注册表项时遇到问题。我认为这与我一开始没有以管理员身份运行它有关,但我尝试构建版本,然后右键单击 exe 并选择“以管理员身份运行”无济于事。

我还尝试使用 RegistryPermission 类,这似乎没有任何区别。

这是代码:

RegistryKey rkey = Registry.LocalMachine;
// RegistryPermission f = new RegistryPermission(
//    RegistryPermissionAccess.Write | RegistryPermissionAccess.Read,
 //   @"HKEY_LOCAL_MACHINE\SOFTWARE\Company\Product");


/**********************/
/* set registry keys  */
/**********************/
RegistryKey wtaKey = rkey.OpenSubKey(@"SOFTWARE\Company\Product", true);
try
{
    wtaKey.SetValue("key1", 123);
    wtaKey.SetValue("key2", 567);
    wtaKey.SetValue("key3", textbox.Text);
    wtaKey.SetValue("key4", "some string");
}
catch (UnauthorizedAccessException ex)
{
    MessageBox.Show(ex.Message);
    return;
}

每次运行它时,这都会给我来自异常的错误消息,即使使用“以管理员身份运行”也是如此。有什么想法可以解决这个问题吗?这似乎很奇怪,因为我的标准用户帐户允许我进入 regedit 并手动更改这些值没有问题。

4

1 回答 1

1

这有效:)

第一的:

您应该使用CreateSubKey而不是 OpenSubKey。

第二:

这不是您遇到的管理问题,相反,您只需在注册表路径的末尾添加另一个“\”即可。

 private void button1_Click(object sender, EventArgs e)
 {
     RegistryKey rkey = Registry.LocalMachine;
     RegistryPermission f = new RegistryPermission(
     RegistryPermissionAccess.Write | RegistryPermissionAccess.Read,
         @"HKEY_LOCAL_MACHINE\SOFTWARE\Company\Product");

     /**********************/
     /* set registry keys  */
     /**********************/
     RegistryKey wtaKey = rkey.CreateSubKey(@"SOFTWARE\Company\Product\");
     try
     {
         wtaKey.SetValue("key1", 123);
         wtaKey.SetValue("key2", 567);
         wtaKey.SetValue("key4", "some string");
     }
     catch (UnauthorizedAccessException ex)
     {
         MessageBox.Show(ex.Message);
         return;
     }
 }
于 2011-09-08T02:34:11.190 回答