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

これは機能します:)

初め:

OpenSubKeyではなく CreateSubKeyを使用する必要があります。

2番:

これは管理上の問題ではなく、レジストリ パスの末尾に別の「\」を追加する必要があっただけです。

 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 に答える