64bit OSでのレジストリ操作時の注意事項
tack41tu.hatenablog.com でClickOnceアプリをインストールする際にレジストリを編集する必要がある事を書いた。
レジストリエディタで編集するのは面倒だし運用も大変なので、レジストリを編集するアプリを作成した。
How to: Configure the ClickOnce Trust Prompt Behavior にある以下のコードを書いて実行し、正常終了するのだがレジストリエディタで確認すると変更が反映されておらず、ClickOnceの動作も変わらない。
Microsoft.Win32.RegistryKey key; key = Microsoft.Win32.Registry.LocalMachine.CreateSubKey("SOFTWARE\\MICROSOFT\\.NETFramework\\Security\\TrustManager\\PromptingLevel"); key.SetValue("LocalIntranet", "Enabled"); key.Close();
どうもレジストリは32bit, 64bitで別の領域らしく、プログラム作成時にターゲットCPUをAnyとし、x86優先とした結果、32bitの領域を更新してしまっているらしい。
aonasuzutsuki.hatenablog.jp を参考に以下のように記載したところ、想定通りに動作するようになった。
Microsoft.Win32.RegistryKey key_base, key; key_base = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64); var key = prerKey.CreateSubKey("SOFTWARE\\MICROSOFT\\.NETFramework\\Security\\TrustManager\\PromptingLevel",); key.SetValue("LocalIntranet", "Enabled"); key.Close();