Почему установка vcredist_x86.exe не исправляет ошибку SideBySide, когда я разрабатываю EXE на одном компьютере и запускаю его на другом?

вопрос

Я написал проект на языке C ++ под названием «Foo» с использованием Microsoft Visual Studio 2005 Verison 8.0.50727.762 (SP.050727-7600) в пакете обновления 3 (SP3) для Windows XP Professional 2002. Я встроил проект в Foo.exe. Затем я скопировал файл Foo.exe в пакет обновления 2 (SP2) для Windows Server 2003 Enterprise Edition. Когда я попытался запустить его, произошла ошибка с этой ошибкой,

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 и манифеста с одного компьютера (где я запускаю 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 и манифеста с компьютера с 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 DLL и манифеста из папки 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

Ответы на вопрос(7)

Ваш ответ на вопрос