次のように、レジストリ サブキーとそれに対応する値をレジストリに書き込もうとしました。
const string subKey = @"SOFTWARE\Apple\Banana\";
const string regKey = "pip";
var rk = Registry.LocalMachine.OpenSubKey(subKey);
if (rk == null)
rk = Registry.LocalMachine.CreateSubKey(subKey);
var rv = rk.GetValue(regKey);
if (rv == null)
rk.SetValue(regKey, "XXX");
return rv.ToString();
ここでの問題は、(regedit を介して) 手動で場所を調べたときに、 のフォルダーが表示されないことSOFTWARE\Apple\Banana
ですHKLM
。
Registry.LocalMachine.OpenSubKey(subKey)
しかし、上記のコードを再度実行してデバッグすると、両方ともrk.GetValue(regKey)
保存前の値が生成されることがわかります。それでも、regeditを介して指定された場所に値が表示されません。したがって、レジストリを検索すると、次の場所に上記のキーと値が表示されます。
HKEY_CURRENT_USER\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Apple\Banana
HKEY_USERS\S-1-5-21-44266131-1313801407-2392705078-1000\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Apple\Banana
どちらの下でも、値は保存したとおりのままです。だから私はこれが私のアプリが値を読み取る場所からであることを理解していますが、私のコードではそれを呼び出しHKLM\SOFTWARE\Apple\Banana\
ます..
なぜこうなった?アクセス権の問題に関連していますか?
これは予想される動作ですか?ある意味で、この値は私にとって非常に重要なので、自動再配置に関連するリスクがあるかどうかを知っているだけです!
正確な場所に残るようにレジストリに書き込む適切な方法はありますか..
私のアカウントは管理者 1 で、32 ビットの Windows 7 を使用しています。
編集:私が知ったように、レジストリエントリはHKLMではなく現在のユーザーの場所に保存されています。また、別のアカウントから reg 値を照会すると、値が取得されません。要するに、まずHKLMに保存しても意味がありません:(