7

そこで、RegEditを使用して、ワークステーションのレジストリに次のものを追加しました。

HKLM \ Software \ Foo \ Bar

バーには「wtf」/「idk」のak/vペアがあります。regeditを閉じて再度開くことにより、これらの変更が「行われた」ことを確認しました。ねえ、彼らはまだそこにいます!うねり。

RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Foo\Bar");

if (key != null)
{
    var = key.GetValue("wtf").ToString();
}

問題は、キーがnullであるということです。

いつ。。。

Registry.LocalMachine.OpenSubKey("Software").GetSubKeyNames()

と呼ばれますが、Fooは多くのSubKeyNameの中には表示されません。

だから、私は明らかに愚かな何かを逃しています。具体的に何が欠けていますか?

4

3 に答える 3

14

64ビットバージョンのWindowsで32ビットプロセスを実行している場合、32ビットプロセス(テストアプリケーション)は、64ビットregeditを使用して作成したキーを常に表示できるとは限りません。

アプリケーションを64ビットとして実行するか、regeditを使用してパスを使用してキーを開いてみてくださいHKLM\SOFTWARE\Wow6432Node\Foo\Bar

32ビットおよび64ビットのアプリケーションデータの詳細については、 MSDNのレジストリを参照してください。

于 2011-09-09T15:16:25.410 に答える
4

x64の問題である可能性がありますか?x86プロセスでレジストリから読み取る場合、Software\Wow6432nodeにリダイレクトされます。

于 2011-09-09T15:15:55.103 に答える
1

読み取り専用で開いてみてくださいRegistry.LocalMachine.OpenSubKey("Software", false).GetSubKeyNames()。おそらく、書き込み可能なものだけを取得しているはずです。

于 2011-09-09T15:21:18.480 に答える