2

リリース構成を使用してMSVC2005でコンパイルされた.exeがあります。問題は、この.exeを他の人に配布すると、次のメッセージが表示されることです。

"This application could not be started, because the application configuration is incorrect. In order to solve the problem you should reinstall the application."

私は彼らにvcredist.exeを与え、問題を解決しました。しかし、なぜこれが一部の PC でのみ発生するのか疑問に思っています。これまでのところ、.exe を実行できない 1 台の PC と .exe を実行できる別の PC があります。どちらも同じアプリケーションがインストールされています。私の .exe を実行できる PC にはmsvcr80.dllがインストールされており、実行できないPC には msvcr80.dll がありません

一部の PC にmsvcr80.dllがインストールされていない理由を知っている人はいますか? どちらの PC にも同じ OS とアプリケーションがインストールされているためです。

どのアプリケーションがどの dll を使用しているかを確認できるツールはありますか?

4

4 に答える 4

1

一部のコンピューターに、msvc 2005 でビルドされたプログラムが既にインストールされている場合は、exe のコピーが機能します。msvc 再頒布可能ファイルが OS のどのバージョンにもプリインストールされているとは思いません。

アプリケーションの実行時に特定のバージョンの msvc ランタイムを使用しているかどうかを知りたい場合は、プロセス エクスプローラー (プロセスに関する情報をできるだけ多く表示する Microsoft ツール) を使用できます。

于 2012-11-01T08:30:36.040 に答える
1

一部の PC に msvcr80.dll がインストールされていない理由を知っている人はいますか? どちらの PC にも同じ OS とアプリケーションがインストールされているためです。

Windows には、C ランタイム ライブラリのどのバージョンもプリインストールされていません。C ランタイム ライブラリは、誰かが vcredist を実行するか、C ランタイム ライブラリに依存し、独自のインストーラーにそのコピーを含むアプリケーションをインストールすることによってインストールできます。

ご覧の 2 台の PC に同じアプリケーションがインストールされているからといって、インストール履歴が同じであるとは限りません。おそらく、1 台の PC がランタイム ライブラリを含むアプリケーションをインストールした後、そのアプリケーションはアンインストールされましたが、ライブラリは取り残されました。

C ランタイム ライブラリ (または redist パッケージ内の別のライブラリ) に依存するアプリケーションを配布しようとしている場合、次のオプションがあります。

  1. ユーザーが vcredist を入手してインストールすることを要求します。
  2. 必要なライブラリのコピーを含め、実行可能ファイルと同じディレクトリにインストールします。
  3. ランタイム ライブラリの静的コピーへのリンク。
  4. ランタイム ライブラリ マージ モジュールを .MSI インストーラーに含めます。これにより、ランタイム ライブラリが共通の場所にまだインストールされていない場合にインストールされます。

どのアプリケーションがどのdllを使用しているかを確認できるツールはありますか?

Visual Studio には、実行可能ファイルまたは DLL を検査し、必要なすべての DLL を推移的に検索する、depends.exe というツールが付属していました。このツールは、新しいバージョンの Windows で使用できる "サイド バイ サイド" インストール機能がないため、サポートされなくなりました。しかし、depends.exe の無料 (オープン ソース?) バージョンが利用できると思います。

特定の実行可能ファイルが DLL に直接依存しているかどうかだけを知りたい場合は、Visual Studio に含まれているコマンド ライン ツールである dumpbin を使用できます。を使用するdumpbin /imports myapp.exeと、依存するすべての DLL を表示できます (ただし、それらの DLL が依存する DLL とは限りません)。

于 2012-11-01T17:41:23.847 に答える
0

「どのアプリケーションがどの dll を使用しているかを確認できるツールはありますか?」 への返信として これを読んでください。システムに Microsoft Visual C++ 2010 再頒布可能パッケージ (x86) がインストールされていないか、最新バージョンがインストールされていないため、vcredist.exe を提供すると問題が解決します。Microsoft の公式 Web サイトからダウンロードできます。また、コマンドラインに興味がある場合は、コマンドtasklistを参照してください。

于 2012-11-01T04:46:29.270 に答える
0

C ランタイムを静的にリンクすることは、この問題を解決するもう 1 つの方法です。これを行う方法は次のとおりです。静的リンク

于 2012-11-01T17:28:11.967 に答える