2017-01-04 4 views
0

レジストリを読み取り、HKEY_LOCAL_MACHINE \ Software \ MyApp \の値を検索する32ビットアプリケーションがありますが、64ビットバージョンのWindowsで実行している場合、 HKEY_LOCAL_MACHINE \ Software \ Wow6432Node \ MyApp。 しかし、私のアプリケーションは、まだ私はレジストリ操作 については、Win32システムレジストリにアクセスするために使用されるこのクラスをcom.zerog.ia.api.pub.SimpleRegistryManager APIを使用しています。HKEY_LOCAL_MACHINE \ SOFTWARE \ MyAppに\JavaプログラムでKEY_WOW64_32KEYを有効または無効にする方法

に値を探します。

MSDNの参照で KEY_WOW64_32KEYフラグは、32ビットまたは64ビットアプリケーションのいずれかから32ビットキーにアクセスするために使用されます。 https://msdn.microsoft.com/en-us/library/windows/desktop/aa384129(v=vs.85).aspx

だから、Java APIの

+0

おそらく[this](http://stackoverflow.com/questions/2011554/disabling-registry-redirection-for-a-registry-key-on-an-x64-platform)が役立ちます。 – DevilsHnd

答えて

0

を使用してKEY_WOW64_32KEYフラグを有効または無効にする方法は、私はそれがのjava.exeの32ビットバージョンで実行している場合は、あなたのプログラムだけで変更することなく動作すると思われるです。 64ビットシステム上で32ビットjava.exeを実行し、それが動作するかどうか確認できますか?

あなたのプログラムが32ビットまたは64ビットVMで動作しているかどうかを検出する方法については、this linkを参照してください。次に、64ビットで実行しているときにWow64レジストリキーパスを参照するようにコードを変更します。

あなたが話すSimpleRegistryManagerクラスに精通していませんが、実装がVMタイプに基づいてKEY_WOW_フラグを渡して、本当にやりたいことと競合する可能性もあります。

これは、Windows上の開発者にとっては珍しいバグではありません。 (特に、64ビットWindows上のさまざまな32ビットおよび64ビットアプリケーションと相互運用する場合)。一部の人々は、怠惰なアプローチを取っています。レジストリキーを読み取ろうとしたときに、キーがHKLM\Software\MyAppに存在しない場合、コードはHKLM\Software\Wow6432Node\MyAppからキーを読み取ろうとしています。

+0

はい私は32ビットjava.exeを64ビットシステム上で動作させることができます。レジストリエントリもWOW6432Nodeに保存されます。 実装がKEY_WOW_flagを渡そうとしている可能性がありますので、キーを要求する前にKEY_WOW_flagを有効にするにはどうすればよいでしょうか。 Java apiやそのようなJavaのアプローチはありますか? –

+0

コードが64ビットのJavaで動作していることが検出された場合は、 'HKEY_LOCAL_MACHINE \ Software \ Wow6432Node \ MyApp'を読み込むように要求します。そうでなければ、32ビットJavaの場合、' HKEY_LOCAL_MACHINE \ Software \ MyApp'となります。それはあなたのために働かないでしょうか? – selbie

+0

問題が解決しました。アプリケーションの最後のリリースで、32ビットインストーラでビルドしましたが、誤ってJRE 32ビットではなくJRE 64ビットを使用しました。結果として問題が発生しました。今日私はJRE 32ビットで再構築しましたが、現在は期待どおりに動作します 情報を見つけるための余裕のために@selbieに感謝し、問題のルート原因に到達するのを助けました。 –

関連する問題