web-dev-qa-db-ja.com

別のコンピューターでVisual Studioでビルドされたexeファイルの実行に関する問題

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

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

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

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

20
Karen123456

デバッグではなくリリースでプログラムを展開し、exeが他のコンピューターで動作するようになりました

4
Karen123456

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

MSDNには、 Visual C++ファイルの再配布(Visual Studio 2008) という素敵な記事があり、潜在的なランタイムエラー必須のVisual C++ライブラリがインストールされていないこと:

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

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

ただし、アプリケーションは他のDLLにも依存する場合があります。プログラムの依存関係を知りたい場合、 Dependency Walker という素晴らしいユーティリティがあります。これや他の多くの状況であなたを助けます:)

20
LihO

背景:

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

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

  1. ランタイムアセンブリをアプリケーションに静的にリンクします(大規模なアプリケーションでは面倒です)。
  2. C++再配布環境をターゲットコンピューターにインストールします(最も簡単な方法)。
  3. アプリケーションのインストール時にターゲットコンピューターにランタイムを展開するセットアッププロジェクトを作成します。 (悪くない)
  4. ランタイムアセンブリをプライベートアセンブリとして展開する(プロフェッショナル) here を参照してください。

条件:

  • アプリケーションで.NETフレームワークを使用しないでください。
  • アプリケーションで共通言語ランタイムサポートを使用しないでください。
11

その特定のエラーを見たことはありませんが、通常はDLL(windows redistributable)の欠落に関するエラーです。実際に構成に問題がないと仮定すると、2つの選択肢があります。

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

2)ターゲットマシンに再配布可能なウィンドウをインストールします。これはおそらく、ターゲットマシンに何もインストールしたくないと述べているので大丈夫ではありません。

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

4
john.pavan

いくつかのDLLファイルがありません。適切なdllをexeと一緒にコピーしてください。

2
mag_zbc