3

Visual C(++)/Visual Studio を使用して作成およびコンパイルされた私の C(++) プログラムは、自分のマシンでは正常に動作しますが、別のマシンでは実行を拒否します。「アプリケーションの構成が正しくないため、このアプリケーションは開始できませんでした。アプリケーションを再インストールすると、この問題が解決する可能性があります。」というエラー メッセージが表示されます。

4

10 に答える 10

5

C++ プログラムを作成すると、C ランタイム ライブラリ (略して CRT) に動的にリンクされます。このライブラリには、printf、malloc、strtok などが含まれています。ライブラリは、MSVCR80.DLL というファイルに含まれています。このファイルはデフォルトでは Windows システムにインストールされないため、アプリケーションを実行できません。

ソリューション?VCREDIST.EXE (Visual C++ 再頒布可能パッケージ) を使用してターゲット マシンに DLL をインストールするか、CRT に静的にリンクします (使用する関数の実際のコードを直接 EXE にプラグインします)。

単純なアプリケーションと一緒に VCREDIST を配布してインストールするのは面倒なので、2 番目のオプションである静的リンクを選択しました。プロジェクトのプロパティに移動し、C/C++ を展開し、[コード生成] をクリックして、ランタイム ライブラリを非 DLL オプションの 1 つに設定します。それだけです。

于 2008-09-19T03:58:55.303 に答える
5

ここでの問題は、CRT (C ランタイム ライブラリ) などの DLL 依存関係の欠落です。この種の問題を診断するための優れたツールは、次の場所にある Dependency Walker (depends.exe) です。

http://www.dependencywalker.com/

投稿したエラー メッセージを生成するコンピューターでこのプログラムを実行し、このプログラムを使用して、このエラーを生成している exe を開きます。Dependency Walker は、必要であるがマシンで利用できない DLL を迅速かつグラフィカルに示します。

于 2008-09-19T04:46:59.510 に答える
1

正しいVCRedistパッケージは、VisualStudioインストールの一部です。VC 8の場合、ここで見つけることができます。

\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages\vcredist_x86
于 2008-09-20T13:49:18.970 に答える
1

最初に使用する必要があるもの

#define _BIND_TO_CURRENT_VCLIBS_VERSION 1

_BIND_TO_CURRENT_VCLIBS_VERSION=1または、プリプロセッサディレクティブに追加します。

問題はバインディングとマニフェストタイプに関連しています。詳細については、http://www.nuonsoft.com/blog/2008/10/29/binding-to-the-most-recent-visual-studio-libraries/を参照してください。

これを行うことにより、アプリケーションはより広範囲のランタイムライブラリバージョンで実行されます。

于 2009-12-28T23:54:45.690 に答える
1

ランタイムに静的にリンクするのが最も簡単です。

c++ -> コード生成 -> ランタイム ライブラリを選択し、「マルチスレッド /MT」を選択します。

ただし、これにより、実行可能ファイルが数百キロバイト大きくなります。これは、小さなプログラムを多数インストールする場合に問題になる可能性があります。これは、それぞれがランタイムの独自のコピーによって負荷がかかるためです。答えは、インストーラーを作成することです。

新しいプロジェクト -> 「セットアップとデプロイ」 -> 「セットアップ プロジェクト」

アプリケーション プロジェクト (ランタイムの DLL バージョンを使用して定義) からの出力をインストーラー プロジェクトに読み込み、ビルドします。ランタイム DLL への依存性が認識され、インストーラー パッケージに含まれ、ターゲット マシンの正しい場所に適切かつ目立たないようにインストールされます。

于 2008-09-19T11:58:51.350 に答える
1

Visual Studio のランタイム ライブラリ (特に CRT) を見逃している可能性が高く、これらの依存関係を取り除く (静的にリンクする) か、ターゲット コンピューターに VC redist パッケージをインストールすることができます。

使用する Visual C++ のバージョンに応じて、さまざまなパッケージをインストールする必要があります。

ビジュアル C++ 2005

ビジュアル C++ 2005 SP1

ビジュアル C++ 2008

警告: これらのパッケージにはライブラリのリリース バージョンしか含まれていません。アプリケーションのデバッグ ビルドを配布できるようにしたい場合は、必要な DLL を自分で処理する必要があります。

于 2008-09-19T07:43:14.593 に答える
1

考えられる解決策........

編集:(私の投稿のほとんどを削除しました)簡単に言えば、「アプリケーション構成が正しくありません」というメッセージが表示されるなど、同様の問題がありました。問題ではありません。マルチスレッド (/mt) コンパイル オプションを使用することになりました。ただし、実行可能な解決策として、InstallShield を使用してインストーラーを作成することができました。installshield builder でいくつかのマージ モジュールを選択しましたが、これで問題が解決したようです。選択されたモジュールは、VC++ 9.0 CRT、VC++ 9.0 DEBUG CRT、および CRT WinSXS MSM マージ モジュールです。それを修正したのはWinSXSマージモジュールだと確信しています。

DEBUG CRT: どこかで気がつきました (どんなに頑張っても、これまでのところ明らかに失敗していました)、私のリリース バージョンはまだ DEBUG CRT に依存していました。それでも問題が解決しない場合、InstallShield マージ モジュールは、私の WinSXS フォルダーに DEBUG CRT フォルダーを配置しました :) VC++ の初心者なので、これは通常、プログラムのデバッグ バージョンを他の人に配布するために使用されると思います。これで問題が解決したかどうかをテストするために、WinSXS フォルダーから DEBUG CRT フォルダーを削除しましたが、アプリケーションは引き続き機能しました。(何かがまだバックグラウンドで実行されている場合などを除きます-私はそれに興味がありません)

とにかく、これは完全に更新された XP SP3 マシン、および必要最小限の VMWare XP SP3 マシン (基本的には .net 3.5 および VC++ 2008 RTM)、および以前は動作していませんでした。

これらのことを試してみてください。運がいいかもしれません。

于 2009-10-11T23:58:48.633 に答える
0

私はこの問題に遭遇し、非常に簡単に修正することができました.

Visual Studio には、ビルドごとにマニフェストを作成するオプション (既定ではオン) が用意されています。

マニフェストはリリースフォルダに入れましたが、exeとは別のリリースフォルダでした。

セットアップ ユーティリティを使用しても、パッケージ化されませんでした。

myprogram.exe.indermediate.manifest のようなファイル名を探す必要があります。

これがexeと同じフォルダーにある場合(およびすべてのdllがある場合)、実行する必要があります

于 2009-11-10T23:41:19.197 に答える
0

また、静的ランタイムに変更する場合、アプリが MFC を使用している場合は、MFC に対しても同じことを行う必要があることに注意してください。これらの設定は、プロパティ->構成/一般にあります

于 2008-11-07T16:02:57.080 に答える
0

多くの場合、このエラーは、.NET を使用するアプリケーションのデバッグ バージョンを実行しようとした結果です。.NET 再頒布可能パッケージには、Visual Studio と共にインストールされる dll のデバッグ バージョンが含まれていないため、Visual Studio がインストールされていない他のマシンでアプリケーションを実行すると、多くの場合、このエラーが発生します。まだ行っていない場合は、アプリケーションのリリース バージョンをビルドしてみて、それが機能するかどうかを確認してください。

于 2008-09-19T04:09:06.793 に答える