23

Visual Studio を使用して C++ でクライアント サーバー アプリケーションを作成しました。

ここで、Visual Studio がインストールされていない別のコンピューターでクライアント EXE ファイルを実行したいのですが、EXE ファイルを実行しようとすると、次のエラー メッセージが表示されます。

アプリケーションの構成が正しくないため、このアプリケーションを開始できませんでした。アプリケーションを再インストールすると、この問題が解決する場合があります。

コンピュータに何もインストールせずに EXE ファイルを実行するにはどうすればよいですか?

4

6 に答える 6

25

Visual Studio で構築されたアプリケーションは、Visual C++ Redistibutable (VCRedist) に依存しています。プログラムが動的にリンクされている場合、バイナリには MSVCR**.dll(Microsoft C ランタイム ライブラリ) が必要になります。

MSDN にはRedistributing Visual C++ Files (for Visual Studio 2008)という素晴らしい記事があり、必要な Visual C++ ライブラリがインストールされていない場合に潜在的な実行時エラーが発生することが記載されています。

アプリケーションを実行しようとしている Windows のバージョンに応じて、次のいずれかのエラー メッセージが表示される場合があります。

  • アプリケーションを正しく初期化できませんでした (0xc0000135)。
  • アプリケーションの構成が正しくないため、このアプリケーションを開始できませんでした。アプリケーションを再インストールすると、この問題が解決する場合があります。
  • システムは指定されたプログラムを実行できません。
基本的に、次の 2 つのオプションがあります。
  • 最も簡単な解決策は、ランタイム ライブラリの動的リンクを静的リンクに変更することです。プロジェクトのプロパティに移動し、C/C++ → コード生成の下に、ランタイム ライブラリオプションがあります。マルチスレッド DLL (/MD)からマルチスレッド (/MT)に変更する必要があります。
  • 別の考えられる解決策は、適切なバージョンの Microsoft VC++ 再頒布可能パッケージがターゲット マシンにインストールされていることを確認することです。

ただし、アプリケーションは他の DLL ファイルにも依存している可能性があります。プログラムの依存関係を知りたい場合は、この状況や他の多くの状況で役立つDependency Walkerという優れたユーティリティがあります:)

于 2013-03-08T15:28:52.423 に答える
13

バックグラウンド:

  • C ++アプリケーションをWindowsコンピューターで実行するには、ランタイムアセンブリ(DLLファイル)が必要です。
  • 通常、これらのランタイムアセンブリは、C:\ Windows\Winsxsディレクトリにあります。
  • すべてのWindowsオペレーティングシステムには、デフォルトでいくつかのランタイムアセンブリが付属しています。
  • ただし、アプリケーションが新しいバージョンのランタイムアセンブリ環境で開発されている場合、ターゲットコンピューターにも同じバージョンのランタイムが存在する必要があります。
  • Visual Studioをインストールすると、ランタイムアセンブリのほとんどの新しいバージョンがコンピューターにインストールされます。

解決:

最後に、とにかく、ターゲットコンピュータは正確なランタイムアセンブリを持っている必要があります。これを行うにはいくつかの方法があります(詳細については、Googleでそれぞれ検索してください)。

  1. ランタイムアセンブリをアプリケーションに静的にリンクします(大規模なアプリケーションでは問題があります)。
  2. ターゲットコンピューターにC++再配布環境をインストールします(最も簡単な方法)。
  3. アプリケーションのインストール時にターゲットコンピューターにランタイムを展開するためのセットアッププロジェクトを作成します(悪くはありません)。
  4. ランタイムアセンブリをプライベートアセンブリ(プロフェッショナル)としてデプロイする場合、詳細についてはこちらを参照してください

条件:

  • アプリケーションで.NETFrameworkを使用しないでください。
  • アプリケーションに共通言語ランタイムサポートを使用しないでください
于 2013-03-08T15:41:23.893 に答える
6

プログラムをデバッグではなくリリースでデプロイしたところ、EXE ファイルが他のコンピューターで動作するようになりました。

于 2013-03-11T16:05:31.507 に答える
5

私は前にその特定のエラーを見たことがありません。通常、欠落している DLL (Windows 再頒布可能) に関するエラーです。実際には構成に問題がないと仮定すると、次の 2 つの選択肢があります。

  1. コンパイル モードをMultithreaded DLLからMultithreadedに変更します。これは、コード生成のプロジェクト プロパティの C++ セクションから実行できます。マルチスレッド モードでは、バイナリは Windows 再頒布可能パッケージに対して静的にリンクされます。これはおそらくあなたが望むものです。

  2. ターゲット マシンに Windows 再頒布可能ファイルをインストールします。ターゲットマシンには何もインストールしたくないと述べているため、これはおそらく問題ありません。

オプション 1 に関する警告: Windows のバージョンが異なれば、再頒布可能ファイルのバージョンも異なります。静的にリンクされたプログラムが期待どおりに動作しない、高度に特殊化された環境に遭遇する可能性があります。

于 2013-03-08T15:24:34.413 に答える
3

いくつかの DLL ファイルが不足しているようです。EXE ファイルと一緒に適切な DLL ファイルを必ずコピーしてください。

于 2013-03-08T15:21:55.320 に答える