C++Builder 10.0 Seattle でビルドされた VCL アプリケーションがあります。フォーム上で Axis Media Control を使用してビデオを表示するため、AxisMediaControl.dll
実行時にファイルがロードされます。
過去に、これを 32 ビットのターゲット マシンにデプロイしたことがあり、アプリケーションはC:\Program Files\AppName
ディレクトリにあり、AxisMediaControl.dll
同じ場所にインストールされていました。すべてが期待どおりに機能しました。
このアプリケーションは 32 ビット アプリケーションであるため、64 ビットのターゲット マシンにデプロイする場合は、C:\Program File (x86)\AppName
ディレクトリにインストールされます。もう一度、AxisMediaControl.dll
ファイルがアプリケーション ディレクトリにデプロイされます。
アプリが「指定されたモジュールが見つかりませんでした」というエラーで起動に失敗します。Process Monitor を使用すると、プログラムがdirProgram Files
ではなく古いディレクトリで Axis DLL を探していることがわかりました。x86
アプリケーションがその場所で DLL を検索する原因は何ですか?
開発マシンで同じバイナリを実行すると、アプリケーションはSysWOW64
ディレクトリから DLL をロードします。DLL がターゲット マシンのそこに配置されている場合でも、その場所を検索できません。私が理解できない古いアプリケーションパスのみを調べています。Program Files
誰かが光を当てることができることを願っています。