問題
Windows XP Professional バージョン 2002 Service Pack 3 で Microsoft Visual Studio 2005 Verison 8.0.50727.762 (SP.050727-7600) を使用して、'Foo' という C++ プロジェクトを作成しました。このプロジェクトを Foo.exe にビルドしました。次に、ファイル Foo.exe を Windows Server 2003 Enterprise Edition Service Pack 2 にコピーしました。実行しようとすると、次のエラーで失敗しました。
C:\foo.exe
The application has failed to start because the application configuration is incorrect.
Reinstalling the application may fix the problem.
[イベント ビューア] > [システム] で、3 つのイベントがログに記録されました。
イベント ID: 32; ソース: サイドバイサイド
Dependent Assembly Microsoft.VC80.CRT could not be found and Last Error was
The referenced assembly is not installed on your system.
イベント ID: 59; ソース: サイドバイサイド
Resolve Partial Assembly failed for Microsoft.VC80.CRT.
Reference error message: The referenced assembly is not installed on your system.
イベント ID: 59; ソース: サイドバイサイド
Generate Activation Context failed for C:\foo\Foo.exe.
Reference error message: The referenced assembly is not installed on your system.
Microsoft Visual C++ 2005 Redistributable をインストールしても修正されませんでした
- http://www.microsoft.com/download/en/details.aspx?id=3387から vcredist_x86.exe をダウンロード
- インストールしました。インストーラーによって、 というフォルダーが作成されました
C:\windows\winsxs\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_0de06acd
。
「プログラムの追加と削除」で確認したこのソフトウェアのバージョンは「8.0.50727.42」でした。
C:\foo\foo.exe を実行しようとすると、上記と同じエラーが発生しました。
Microsoft Visual C++ 2005 SP1 Redistributable をインストールしても修正されませんでした
- http://www.microsoft.com/download/en/details.aspx?id=5638から vcredist_x86.exe をダウンロード
- インストールしました。インストーラーは次のフォルダーを作成しました:
C:\windows\winsxs\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6b128700
.
「プログラムの追加と削除」で確認したこのソフトウェアのバージョンは「8.0.56336」でした。
C:\foo\foo.exe を実行しようとすると、上記と同じエラーが発生しました。
同じマシン (EXE を実行しているマシン) から CRT DLL とマニフェストをコピーしても、問題は解決しませんでした。
msvcm80.dll
、msvcp80.dll
およびmsvcr80.dll
からC:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_0de06acd
にコピーしましたC:\foo
。- 次に、 にコピー
C:\WINDOWS\WinSxS\Manifests\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_0de06acd.manifest
しC:\foo
て名前を に変更しましたMicrosoft.VC80.CRT.manifest
。
マニフェスト ファイルの 4 行目は次のようになります。
<assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.42"
processorArchitecture="x86"
publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
今回 C:\foo\foo.exe を実行してみたところ、うまくいきませんでした。C:\windows\winsxs\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6b128700
DLLと対応するマニフェスト ファイルを使用して、このことをもう一度繰り返しました。それも役に立ちませんでした。同じエラーが発生しました。
どちらの場合も、[イベント ビューアー] > [システム] で次のエラーが表示されました。
イベント ID: 34; ソース: サイドバイサイド
Component identity found in manifest does not match the identity of the component requested
イベント ID: 58; ソース: サイドバイサイド
Syntax error in manifest or policy file "C:\foo\Microsoft.VC80.CRT.MANIFEST" on line 4.
イベント ID: 59; ソース: サイドバイサイド
Generate Activation Context failed for C:\foo\Foo.exe. Reference error message: The manifest file contains one or more syntax errors.
Windows XP マシン (EXE をビルドした場所) から CRT DLL とマニフェストをコピーしても、問題は解決しませんでした。
- およびWindows XP マシン ( foo.exe
msvcm80.dll
を開発およびビルドした場所) からWindows Server 2003 (foo.exe を実行しようとしている場所) にコピーしました。msvcp80.dll
msvcr80.dll
C:\winnt\winsxs\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6b128700
C:\foo
- 次に、 にコピー
C:\winnt\winsxs\Manifests\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6b128700.manifest
しC:\foo
て名前を に変更しましたMicrosoft.VC80.CRT.manifest
。
マニフェスト ファイルの 4 行目は次のようになります。
<assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.762"
processorArchitecture="x86"
publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
C:\foo\foo.exe を実行しようとすると、前のセクションで説明したのと同じエラーが発生しました。
CRT DLL とマニフェストを Visual Studio フォルダーからコピーすると修正されました。
msvcm80.dll
、およびWindows XP マシン (foo.exe を開発およびビルドした場所) からWindowsmsvcp80.dll
Server 2003 マシン (実行しようとしている場所) にコピーしました。msvcr80.dll
Microsoft.VC80.CRT.manifest
C:\Program Files\Microsoft Visual Studio 8\VC\redist\x86\Microsoft.VC80.CRT
C:\foo
マニフェスト ファイルの 4 行目は次のようになります。
<assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.6195"
processorArchitecture="x86"
publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
今回は問題なく C:\foo\foo.exe を実行できました。
質問
2 番目の方法で説明されているように、「Microsoft Visual C++ 2005 SP1 Redistributable」(vcredist_x86.exe) をインストールすると、問題が解決することを期待していました。しかし、そうではありませんでした。C:\Program Files\Microsoft Visual Studio 8\VC\redist\x86\Microsoft.VC80.CRT
開発マシンのフォルダーからDLLとマニフェストファイルをコピーすると修正されました。なぜそうなったのですか?
ビルド オプション
場合によっては、私の質問に答えるのに役立ちます。Visual Studio プロジェクトのプロパティからピックアップしたコンパイラとリンカーのオプションは次のとおりです。
構成プロパティ > C/C++ > コマンド ライン:
/O2 /GL /D "_MBCS" /FD /EHsc /MD /Fo"Release\\" /Fd"Release\vc80.pdb" /W3 /nologo /c /Wp64 /Zi /TP /errorReport:prompt
構成プロパティ > リンカー > コマンド ライン:
/OUT:"C:\MixedBag\Release\Foo.exe" /NOLOGO /MANIFEST /MANIFESTFILE:"Release\Foo.exe.intermediate.manifest" /DEBUG /PDB:"c:\MixedBag\release\Foo.pdb" /OPT:REF /OPT:ICF /LTCG /MACHINE:X86 /ERRORREPORT:PROMPT kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib