17

"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{26A24AE4-039D-4CA4-87B4-2F86416024FF}"C++ でレジストリ エントリを開く必要があります。これには、Java 64 ビット アプリケーションが含まれています。そのレジストリ エントリのフル パスは"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{26A24AE4-039D-4CA4-87B4-2F86416024FF}".

このパスは、regedit で表示できます。私が使う

returnStatus = RegOpenKeyEx(HKEY_LOCAL_MACHINE, 
    TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{26A24AE4-039D-4CA4-87B4-2F86416024FF}"),
    0, KEY_ALL_ACCESS, &hKey)

レジストリを開くため。しかし、エラー値 (2) を返します。

returnStatus = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
    TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall")...

成功の結果を返します。私に何ができる?

4

2 に答える 2

30

32 ビット アプリケーションと 64 ビット アプリケーションのレジストリ キーは分離されているため、32 ビット アプリケーションから 64 ビット レジストリに (直接) アクセスすることはできません。あなたの場合、必要なハイブがレジストリの 32 ビット部分に存在しない場合、親フォルダーにのみアクセスできます。

MSDN から:

64 ビット Windows では、アプリケーションの 64 ビット バージョンが32 ビット バージョンとは異なるレジストリ キーと値。リダイレクトまたは反映されない共有レジストリ キーもあります。

MSDN のリストを読むことができます: Registry Keys Affected by WOW64。残念ながら、SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstallこれについては言及されていませんが、影響も受けています。

解決策レジストリの 64 ビット部分へのアクセス
を明示的に要求する必要があります。 RegOpenKeyExこれは、呼び出しにフラグを追加することでKEY_WOW64_64KEY実行できます (を使用して 64 ビット アプリケーションから 32 ビット レジストリにアクセスできますKEY_WOW64_32KEY)。このフラグは Windows 2000 ではサポートされていないことに注意してください。アプリケーションがその (古い) バージョンと互換性がある必要がある場合は、ケースを管理する必要があります。

詳細については、MSDN の次のリンクを参照してください: Accessing an Alternate Registry View

簡単にするために、呼び出しを次のように変更するだけです。

returnStatus = RegOpenKeyEx(HKEY_LOCAL_MACHINE, 
    TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{26A24AE4-039D-4CA4-87B4-2F86416024FF}"),
    0, KEY_ALL_ACCESS, &hKey);

に:

returnStatus = RegOpenKeyEx(HKEY_LOCAL_MACHINE, 
    TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{26A24AE4-039D-4CA4-87B4-2F86416024FF}"),
    0, KEY_ALL_ACCESS | KEY_WOW64_64KEY, &hKey);

this を使用するフラグを使用せずに、そのパス
を 介してのみキーにアクセスできることに注意してください。ノードはWOW64 で使用される仮想化されたノードですが、これに依存するべきではないため、安定していますが、変更される可能性のある実装の詳細を考慮する必要があります。HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\UninstallWow6432

参考資料
- MSDN のレジストリ仮想化。
- 読者は、この投稿で興味深いヒントを見つけることができます: http://poshcode.org/2470、これは PowerShell 用ですが、32 ビット アプリケーションから (64 ビット レジストリ部分に関連する) WMI データにアクセスする方法を説明しています。

于 2012-05-10T12:20:39.917 に答える
-3

エラー 2 は、レジストリ パスが存在しないことを意味します。

キー {26A24AE4-039D-4CA4-87B4-2F86416024FF} が実際に SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall の下に存在することを確認してください

于 2012-05-10T12:13:39.043 に答える