2011-01-10 12 views
0

これについて多くのサイトがあります。私は今、約6時間にわたって異なるアイデアをテストしてきました。私は64ビットレジストリを変更するために32ビットのアプリケーションを取得しようとしています。 HKLM \ Software \ Microsoft \ Windows \ Current Version \ Installer \ UserData \にアクセス許可を設定する必要があります。理由が不明な場合は、権限が正しくないとソフトウェアがエラーをスローするためです。ここでC#32bitアプリ64bitレジストリ

は、私はプログラムが前localMachineX64にキーを変更するにWOW6432NODEでテストキーに罰金働いていた

static bool SetRegistryPermissions(string hkLmKey, string userAccount) 
     { 
      //this will force the app to see the 64bit registry instead of being redirected 
      RegistryKey localMachineX64View = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64); 
      RegistryKey rk = localMachineX64View.OpenSubKey(hkLmKey, true); 

      //This redirects to the Wow6432Node in the registry 
      //RegistryKey rk = Registry.LocalMachine.OpenSubKey(hkLmKey, true); 

をしようとしているものです。 OpenSubKeyでデバッグするときにセキュリティ例外が発生するようになりました。

ご迷惑をおかけして申し訳ございませんが、ご了承ください。

P.S. C#でNTの権限を書く良い情報を含んでいる書籍の提案は、おまけになります。

+0

あなたは、これはあなたの問題への間違った解決策であることを認識していますか?標準ユーザーはHKLMに書き込むべきではありません。 –

+0

これが「間違った」解決策であれば、どのようにこの問題を修正しますか?私は、それを修正してユーザーがそれをやることを防ぐために問題が発生したときにのみ使用しています。 –

答えて

0

64ビットのアクセス権を設定できる小さな64ビットアプリケーションを作成できますか?インストーラのインストール後のイベントからexeを呼び出すことができます。

+0

それだけの問題は、32bitマシンでも動作する必要があることです。だから私は64ビットコードを避けようとしている。 –

+0

最終的にあなたが言っていたことをクリックしました。はい、私はx64とx86バージョンを作ることができましたが、それを避けようとしていました。 –

+0

Jakeに感謝します。私はそれをやりたかったのですが、それは仕事を終えました –

0

これに対して.NETのアプローチがあるかどうかは不明ですが、Windows APIは確かに解決策を提供します。アクセスオプションの1つとしてKEY_WOW64_64KEY(http://msdn.microsoft.com/en-us/library/ms724878%28v=vs.85%29.aspx)が含まれているRegOpenKeyEx関数を使用できます。これにより、Wow6432Nodeサンドボックスだけでなく、32ビットアプリケーションが完全なレジストリにアクセスできるようになります。

編集:pinvoke.netは行く準備ができてC#の例があります。http://www.pinvoke.net/default.aspx/advapi32/RegOpenKeyEx.html

関連する問題