2

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

コンピューターの BPL がビルド マシンの BPL と異なるため、いくつかのプログラムがクラッシュしました。
更新のたびにインストーラーに使用される各 BPL を追加する必要がある場合、それらを使用する際のポイントの 1 つが無効になると思います。

それが違いを生むなら、Delphi 7


私が抱えていた問題のフォローアップです。
rtl70.bpl ファイルは、ビルド コンピューターとクライアントの間でわずかに異なるだけでした。

クライアント コンピュータ: 7.0.4.453 760 KB (778,240 バイト) 2002 年 8 月 20 日火曜日、午後 4:40:26
ビルド コンピュータ: 7.0.4.453 760 KB (778,240 バイト) 2002 年 8 月 9 日金曜日、 11:午後30時

私が使用していたアップデーターはそれらを同じものとして無視しました(ビルド番号の変更はありません)が、ファイルを手動で削除してコピーすると、すべてが機能するように見えました.

4

5 に答える 5

2

残念だけど違う。アプリケーションに必要な.bplファイルからのインポートが欠落していることが原因でクラッシュが発生した場合、クラッシュした実行可能ファイル自体からこれらのパッケージをチェックする方法はありません(Delphi RTLとリンカー自体を書き換える以外に)。PatrickvLのソリューションは、おそらくあなたの状況に最適です。

Neftalíのソリューションはオプションかもしれません-もちろん、RTLをパッケージ化し、多くのファイルを複製し、そもそもパッケージを持つことのポイントの1つを失うという犠牲を払って。ただし、プライベートDLLを使用している場合(つまり、プライベートバイナリディレクトリにDLLをコピーする場合)、実行可能ファイルと同じ名前で、拡張子.localを追加した空のファイルも作成する必要があります(メモ帳用)。 .exeは、 notepad.exe.localを作成します。詳細については、DLLリダイレクトに関するRaymondChenの記事を参照してください。

于 2008-09-19T19:21:04.190 に答える
2

プログラムがクラッシュする場合は、動的にリンクされているライブラリを読み込めないことが原因である可能性があります。(あなたが言っているように、これは、システムが必要なライブラリのコピーを検索パスのどこにも見つけられない場合に発生します)。

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

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

于 2008-09-19T06:45:17.323 に答える
1

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

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

よろしく。

PD:すみません-私の悪い英語のために。

于 2008-09-19T08:37:41.763 に答える
1

これらの bpl を使用する実行可能ファイルからこれを行うことはできませんが、bpl をチェックしてメインの実行可能ファイルを呼び出す小さなスタートアップ プログラムを作成することはできます。

于 2008-09-24T06:13:03.697 に答える
-1

Sometimes Delphi adds of automatic form the line:
{$R ' *.res'}
to the files of project or packages.

Comment (//) that line and to compile again.

于 2008-09-19T08:42:26.527 に答える