Проблема
Я написал проект C ++ под названием «Foo» с использованием Microsoft Visual Studio 2005 Verison 8.0.50727.762 (SP.050727-7600) в Windows XP Professional Версия 2002 с пакетом обновления 3 (SP3).Я встроил проект в Foo.exe.Затем я скопировал файл Foo.exe в Windows Server 2003 Enterprise Edition с пакетом обновления 2. Когда я попытался запустить его, произошел сбой с этой ошибкой
C:\foo.exe
The application has failed to start because the application configuration is incorrect.
Reinstalling the application may fix the problem.
В окне просмотра событий> Система, три событиябыли зарегистрированы.
Код события: 32;Источник: SideBySide
Dependent Assembly Microsoft.VC80.CRT could not be found and Last Error was
The referenced assembly is not installed on your system.
Код события: 59;Источник: SideBySide
Resolve Partial Assembly failed for Microsoft.VC80.CRT.
Reference error message: The referenced assembly is not installed on your system.
Код события: 59;Источник: SideBySide
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 не устранила
- Загруженный файл vcredist_x86.exe из http://www.microsoft.com/download/en/details.aspx?id=3387
- Установил его.Программа установки создала папку с именем
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 с пакетом обновления 1 (SP1) не устранила
- Скачал vcredist_x86.exe с http://www.microsoft.com/download/en/details.aspx?id=5638
- Установил его.Программа установки создала папку с именем:
C:\windows\winsxs\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6b128700
.
Версия этого программного обеспечения, найденная в разделе «Установка и удаление программ», была «8.0.56336».
При попытке выполнитьзапустите C: \ foo \ foo.exe, я получил те же ошибки, которые я описал выше.
Копирование CRT DLL и манифеста с той же машины (где я запускаю EXE) не исправилоэто.
- Я скопировал
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
.
Четвертая строка файла манифеста выглядела так:
<assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.42"
processorArchitecture="x86"
publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
Когда я попытался запустить C: \ foo \ foo.exe на этот раз не сработало.Я повторил это снова с DLL в C:\windows\winsxs\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6b128700
и соответствующим файлом манифеста.Это тоже не помогло.Я получил ту же ошибку.
В обоих случаях я получил следующие ошибки в Просмотр событий> Система.
Код события: 34;Источник: SideBySide
Component identity found in manifest does not match the identity of the component requested
Код события: 58;Источник: SideBySide
Syntax error in manifest or policy file "C:\foo\Microsoft.VC80.CRT.MANIFEST" on line 4.
Код события: 59;Источник: SideBySide
Generate Activation Context failed for C:\foo\Foo.exe. Reference error message: The manifest file contains one or more syntax errors.
Копирование библиотек CRT DLL и манифеста с компьютера с Windows XP (где я собрал EXE) не удалось исправить.
- Я скопировал
msvcm80.dll
, msvcp80.dll
и msvcr80.dll
с C:\winnt\winsxs\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6b128700
машины с Windows XP (где я разработал и создал foo.exe) на C:\foo
Windows Server 2003 (где я пытаюсь запустить foo.exe). - Затем я скопировал
C:\winnt\winsxs\Manifests\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6b128700.manifest
в C:\foo
и переименовал его в Microsoft.VC80.CRT.manifest
.
Четвертая строка файла манифеста выглядела так:
<assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.762"
processorArchitecture="x86"
publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
При попытке запустить C: \ foo \ foo.exe я получил те же ошибки, которые упоминались в предыдущем разделе.
Исправлено это при копировании библиотек CRT и манифеста из папки Visual Studio.
- Скопировано
msvcm80.dll
, msvcp80.dll
, msvcr80.dll
и Microsoft.VC80.CRT.manifest
с C:\Program Files\Microsoft Visual Studio 8\VC\redist\x86\Microsoft.VC80.CRT
машины Windows XP (где я разрабатывал и создавал foo.exe) в C:\foo
Windows Server 2003 (где я пытаюсь его запустить).
Четвертая строка файла манифеста выглядела так:
<assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.6195"
processorArchitecture="x86"
publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
На этот раз я могуЯ запустил C: \ foo \ foo.exe без проблем.
Вопрос
Я ожидал, что при установке «Microsoft Visual C ++ 2005 SP1 Redistributable» (vcredist_x86.exe)), как описано во втором подходе, это исправит.Но это не так.Копирование DLL-файлов и файлов манифеста из папки C:\Program Files\Microsoft Visual Studio 8\VC\redist\x86\Microsoft.VC80.CRT
на компьютере разработчика исправило это.Почему так?
Опции сборки
На случай, если это поможет вам ответить на мой вопрос.Вот параметры компилятора и компоновщика, которые я выбрал из свойств проекта 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