2008-09-19 13 views
2

プログラムの起動時にクライアントコンピュータにインストールされているBPLのバージョン(Rtl70.BPL、Indy70.bplなど)を確認することはできますか?プログラムの起動時にBPLのバージョンを取得する

コンピュータ上のBPLがビルドマシン上のBPLと異なるため、いくつかのプログラムがクラッシュしました。
各アップデートでインストーラーに使用されているBPLをそれぞれ追加する必要がある場合は、それらを使用しているポイントの1つを敗北させると思います。

デルファイ7、それはちょうど私が持っていた問題をフォローアップの違い


を行う場合。
rtl70.bplファイルは、ビルドコンピュータとクライアント間でわずかに異なります。

クライアントコンピュータ:7.0.4.453 760キロバイト(778240バイト)2002年8月20日(火曜日)、午前4時40分26秒PM
ビルドコンピュータ:7.0.4.453 760キロバイト(778240バイト)金曜日、9 2002年8月11日01:30:00

アップデーターは同じもの(ビルド番号は変更されていない)として無視されていましたが、手作業で削除してすべてのものをコピーしたようです作業。

答えて

2

残念ながら、クラッシュがアプリケーションで必要とされる.bplファイルからのインポートの欠落によるものである場合、クラッシュする実行可能ファイル自体からそれらのパッケージをチェックする方法はありません(Delphi RTLとリンカー自体を書き換える手間がありません)。 PatrickvLのソリューションはおそらくあなたの状況に最適です。

Neftalíのソリューションは、もちろん、RTLのパッケージング、多くのファイルの複製、最初にパッケージを持つ点の1つを失うという選択肢かもしれません。しかし、プライベートDLLを使用している場合(つまり、プライベートバイナリディレクトリにDLLをコピーする場合)、実行可能ファイルと同じ名前の空のファイルを作成する必要がありますが、拡張子.localを追加します。 notepad.exeの場合は、notepad.exe.localを作成します。詳細については、Raymond Chen's article on DLL redirectionを参照してください。

+0

ありがとうございました。私は聞きたかったのです。;) –

2

プログラムがクラッシュした場合は、動的にリンクされているライブラリをロードできない可能性があります。 (あなたが言うところでは、システムが検索パス内のどこでも必要なライブラリのコピーを見つけることができないときにこれが起こります)。

この問題は、Windows OSがMapAndLoadというAPI(thisとも呼ばれる)を介して行うアプリケーションの起動時に発生するという問題があります。このAPIは、アプリケーションが起動する前に呼び出されるため、これを傍受する方法はありません。

私が与えることができる1つの提案は、ランチャーを使用することです(静的にリンクする必要があります。これは、/ no/librariesがない場合の問題を防ぐためです)。 このランチャーは、実際のアプリケーションを検査し、必要なインポートを確認し、環境をチェックし、ユーザーに良い失敗/トラブルシューティングの提案ダイアログを表示することができます。

1

それはプログラムの起動時にクライアントコンピュータに>インストールされているBPL(すなわちRtl70.BPL、Indy70.bplなど)のバージョンをチェックすることは可能ですか? コンピュータ上のBPLがビルドマシン上のBPLと異なるため、いくつかのプログラムがクラッシュしました。 各アップデートでインストーラに使用されている各BPLを追加する必要がある場合は、それらを使用する際のポイントの1つを無効にすると思います。

BPL(RTL70.bpl、INDY.BPL、...)のコピー(開発)は、アプリケーションをインストールするのと同じディレクトリにインストールする必要があります。アプリケーションは、最初にBPLを同じディレクトリで検索し、パス内のディレクトリで検索します。 あなたのシステムが同じBPLの複数のコピーを持つことができるというのは、同じファイルの異なるバージョンには問題がないという点です。

よろしくお願いいたします。

P.D:私の悪い英語のためにすみません。

-1

デルファイでは、自動的に次の行を追加します。
{$ R '*。res '}
をプロジェクトまたはパッケージのファイルに追加します。

その行をコメントして、もう一度コンパイルしてください。

1

これらのbplsを使用する実行可能ファイルからは実行できませんが、bplsをチェックしてメインの実行可能ファイルを呼び出す小さな起動プログラムを使用することができます。

+1

これは受け入れられた答えです。なぜなら、メインの実行可能ファイルを実行する前にまずバージョンをチェックする方法を伝えるからです – mjn

関連する問題