0

C++ Builder 2010 でビルドされたアプリケーションがあります。一部の構成値はレジストリに保存され、32 ビット アプリケーションであるため、一部の値はWow6432Nodeキーの下に保存されます。

WinXP、Win7、Win8... 32 ビットまたは 64 ビットのいずれでアプリケーションを実行しても、これは時計仕掛けのように機能します。アプリケーションは、TeamCity の下の Windows 7 64 ビット ビルド エージェントによってビルドされます。

その後、突然、機能しなくなりました。レジストリ キーをロードするコードは変更されていません。掘り下げた後、レジストリオブジェクトのアクセスを強制的にKEY_WOW64_32KEYにすることで機能するようになりました。

しかし、それをどこでもしなければならないのはかなり面倒です。最初に読み取りを試み、値が見つからない場合はwowキーをチェックインしてみてください。最後に機能してからのすべてのコード変更を調べましたが、レジストリの読み込みには何も影響しませんでした。.cbprojファイルを元に戻そうとしましたが、奇妙な設定が誤って有効になってしまったが、うまくいきませんでした。

また、Win 7 64 ビット マシンでもある開発マシンでローカルにビルドすると、正常に動作します。

いったい何が起こったのでしょうか?それは魔法のようです:)

4

1 に答える 1

0

KEY_WOW64_32KEY64 ビット プロセスが 32 ビット キーにアクセスする必要がある場合、または 32 ビット プロセスがリモート 64 ビット マシンの 32 ビット レジストリにアクセスする必要がある場合にのみ適用されます。あなたのプロジェクトが 64 ビット用にコンパイルされており、期待されているように 32 ビット用ではないのではないかと思います。アプリを実行するときは、実際に 32 ビットまたは 64 ビットのプロセスであるかどうかをタスク マネージャーで確認します。

于 2014-03-26T23:56:52.430 に答える