2

レジストリから読み取り、いくつかの値を設定したいのですが、NullReferenceExceptions が発生し続けます。

public partial class Form1 : Form
{

    RegistryKey rkApp = null;
    RegistryKey settings = null;

    public Form1()
    {
        InitializeComponent();

        rkApp = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
        settings = Registry.CurrentUser.OpenSubKey("HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Shit", true);

        if (settings.GetValue("automove") != null)
        {
            automove = true;
            autostartToolStripMenuItem.Checked = true;
        }
    }
}

この例では無関係なコードをいくつか削除しましたが、これは私のコードです...何かアイデアはありますか?

次の場合、エラーが行に表示されます(settings.GetValue("automove") != null)

4

2 に答える 2

4
Registry.CurrentUser.OpenSubKey("HKEY_LOCAL_MACHINE\\...

ハイブには、HKEY_CURRENT_USER名前が で始まるキーが含まれていませんHKEY_LOCAL_MACHINE。ローカル マシン ハイブから読み取ろうとしている場合は、コードを更新する必要があります。

Registry.LocalMachine.OpenSubKey("SOFTWARE\\Wow6432Node\\Shit", true)

また、Wow6432Nodeキーが存在しない場合 (32 ビット OS で実行している可能性がありますか?)、または というキーが含まれていない場合ShitOpenSubKeyメソッドは を返しnullます。

于 2012-10-30T19:53:55.497 に答える
0

私はこのように修正しました:

まず、設定がnullかどうかを確認しました。設定が null の場合、最初に SubKey を作成します。この後、設定変数を再設定すると、すべて問題ありません。

settings = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Shit", true);
if (settings == null)
{
    Registry.CurrentUser.CreateSubKey("SOFTWARE\\Shit").Flush();
    settings = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Shit", true);
}
于 2012-10-30T20:03:27.053 に答える