ランタイム パッケージでビルドされたアプリケーションがあります。実行可能ファイルが起動すると、必要なパッケージ (.bpl) が自動的に読み込まれます。
最近、ターミナル サービスとして使用する Windows 2008 R2 サーバーをインストールしました。
次のように、アプリケーションのいくつかの古いコンパイル済みバージョンをさまざまなパスに保持します。
c:\app\version_1\common.bpl
c:\app\version_1\app.exe
c:\app\version_2\common.bpl
c:\app\version_2\app.exe
Common.bpl は、app.exe が依存するランタイム パッケージです。
問題:
起動する"c:\app\version_2\app.exe"
とロードされます"c:\app\version_2\common.bpl"
。を開始する"c:\app\version_1\app.exe"
と、間違った bpl (version_2 から) が読み込まれます。
パス"c:\app\version_2\"
がシステム検索パスにありません。
Windows2003 サーバーでは、この問題は発生しません。
これを解決するにはどうすればよいですか?
ありがとう!
Process Explorer (microsoft sysinternals) をダウンロードし、各実行可能ファイルのロード済みモジュールを確認しましたが、すべて正しいです!
しかし、私は別の問題に気付きました。2 番目のバージョンを開始した後、entry-not-found-error が発生し、いずれかのバージョンにのみ存在するユニットの初期化エントリ ポイントが見つからなかったことを通知します。
何かがとても奇妙です。ProcessExplorer は、プロセスが正しいモデルをロードしていることを教えてくれますが、それらが実行されているとき、これは起こっていないようです。
アプリケーションがロードされたモジュールを共有しているようです。
解決した
FindVCLWindow を使用する MouseHook があり、これが AV を生成していました。
ご不便をおかけして申し訳ありません。ありがとうございます。