3

トラブルシューティングの目的で、私のアプリが実行時にチェックできる実用的な方法はありますか?

  1. openssl dll (ssleay32.dll および libeay32.dll) が実際に存在し、アプリで正常にロードできるかどうか?
  2. openssl dll が実際にロードされたパス (アプリのディレクトリ内のコピーからロードされているのか、システム パスのどこかから迷子のコピーが取得されているのかを確認できます)
  3. アプリ (または Indy) が使用している openssl のバージョンは? (正確なパスがわかっている場合、openssl dll のほとんどのバージョンには、Windows ファイルのプロパティを表示して確認できるバージョン情報が含まれています)
4

3 に答える 3

3

はい。あなたが尋ねたのと同じ順序で:

  1. LoadLibrary各 DLL に対して使用し、戻り値を確認します。
  2. #1 が成功した場合GetModuleFileNameは、ロードされた DLL へのフル パス名を取得するために使用します。
  3. #2 が成功GetFileVersionInfoした場合は、DLL に利用可能なファイル バージョン情報があるかどうかを確認するために使用します。存在する場合は、 を使用VerQueryValueしてバージョン情報を読み取ります (Windows ファイルのプロパティを表示して表示される情報と同じです)。

それらはすべてWindowsユニットから利用できます。Delphi での 3 つすべての例は、こちらの StackOverflow にあります。それらが見つからない場合は、別の質問 (以下を参照) をここに投稿して、それらの使用に関するヘルプを求めてください。

(ここでの投稿には、単一の回答を回答として選択できるように、単一の質問を含める必要があります。同じ投稿に複数の質問を含める場合、複数の人がそれぞれの質問に個別に回答できます。その場合、どのように選択しますか?正しいと受け入れるものですか?)

于 2013-04-07T05:37:21.937 に答える
2

Indy 10IdOpenSSLSetLibPath()には IdSSLOpenSSLHeaders.pas ユニットに機能があるため、OS 検索パスで DLL を探す代わりに、DLL の場所を Indy に伝えることができます。

最適なオプションは、必要な DLL をアプリのインストール ディレクトリに配布することです。そうすれば、アプリが何を読み込むかを推測する必要はありません。

于 2013-04-07T16:42:13.010 に答える