¿Por qué instalar vcredist_x86.exe no soluciona el error SideBySide cuando desarrollo un EXE en una máquina y lo ejecuto en otra?

Problem

Escribí un proyecto C ++ llamado 'Foo' usando Microsoft Visual Studio 2005 Verison 8.0.50727.762 (SP.050727-7600) en Windows XP Professional Versión 2002 Service Pack 3. Construí el proyecto en Foo.exe. Luego, copié el archivo Foo.exe en un Service Pack 2 de Windows Server 2003 Enterprise Edition. Cuando intenté ejecutarlo, falló con este error,

C:\foo.exe
The application has failed to start because the application configuration is incorrect.
Reinstalling the application may fix the problem.

En el Visor de eventos> Sistema, se registraron tres eventos.

ID del evento: 32; Fuente: SideBySide

Dependent Assembly Microsoft.VC80.CRT could not be found and Last Error was
The referenced assembly is not installed on your system.

ID del evento: 59; Fuente: SideBySide

Resolve Partial Assembly failed for Microsoft.VC80.CRT.
Reference error message: The referenced assembly is not installed on your system.

ID del evento: 59; Fuente: SideBySide

Generate Activation Context failed for C:\foo\Foo.exe.
Reference error message: The referenced assembly is not installed on your system.

Instalar Microsoft Visual C ++ 2005 Redistributable no lo solucionó

Descargado vcredist_x86.exe dehttp: //www.microsoft.com/download/en/details.aspx? id = 3387 Lo instalé. El instalador creó una carpeta llamadaC:\windows\winsxs\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_0de06acd.

La versión de este software que se encuentra en 'Agregar o quitar programas' fue '8.0.50727.42'.

Al intentar ejecutar C: \ foo \ foo.exe, obtuve los mismos errores que describí anteriormente.

Instalar Microsoft Visual C ++ 2005 SP1 Redistributable no lo solucionó

Descargado vcredist_x86.exe dehttp: //www.microsoft.com/download/en/details.aspx? id = 5638 Lo instalé. El instalador creó una carpeta llamada:C:\windows\winsxs\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6b128700.

La versión de este software que se encuentra en 'Agregar o quitar programas' fue '8.0.56336'.

Al intentar ejecutar C: \ foo \ foo.exe, obtuve los mismos errores que describí anteriormente.

Copiando archivos CRT DLL y manifiestos desde la misma máquina (donde estoy ejecutando el EXE) no lo solucionó.

Yo copiémsvcm80.dll, msvcp80.dll ymsvcr80.dll desdeC:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_0de06acd aC:\foo. A continuación, copiéC:\WINDOWS\WinSxS\Manifests\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_0de06acd.manifest aC:\foo y lo renombró aMicrosoft.VC80.CRT.manifest.

La cuarta línea del archivo de manifiesto se veía así:

<assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.42"
                  processorArchitecture="x86"
                  publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>

Cuando intenté ejecutar C: \ foo \ foo.exe esta vez, no funcionó. Repetí esto nuevamente con las DLL enC:\windows\winsxs\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6b128700 y el archivo de manifiesto correspondiente. Tampoco ayudó. Tengo el mismo error

En ambos casos, obtuve los siguientes errores en el Visor de eventos> Sistema.

ID del evento: 34; Fuente: SideBySide

Component identity found in manifest does not match the identity of the component requested

ID del evento: 58; Fuente: SideBySide

Syntax error in manifest or policy file "C:\foo\Microsoft.VC80.CRT.MANIFEST" on line 4.

ID del evento: 59; Fuente: SideBySide

Generate Activation Context failed for C:\foo\Foo.exe. Reference error message: The manifest file contains one or more syntax errors.

Copiando archivos CRT DLL y manifiestos de la máquina Windows XP (donde construí el EXE) no lo solucionó.

Yo copiémsvcm80.dll, msvcp80.dll ymsvcr80.dll desdeC:\winnt\winsxs\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6b128700 de la máquina con Windows XP (donde desarrollé y construí foo.exe) aC:\foo de Windows Server 2003 (donde estoy tratando de ejecutar foo.exe). A continuación, copiéC:\winnt\winsxs\Manifests\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6b128700.manifest aC:\foo y lo renombró aMicrosoft.VC80.CRT.manifest.

La cuarta línea del archivo de manifiesto se veía así:

<assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.762"
                  processorArchitecture="x86"
                  publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>

Al intentar ejecutar C: \ foo \ foo.exe ahora recibí los mismos errores mencionados en la sección anterior.

Copiando las DLL CRT y el manifiesto de la carpeta de Visual Studio lo reparó.

Copiadomsvcm80.dll, msvcp80.dll, msvcr80.dll yMicrosoft.VC80.CRT.manifest desdeC:\Program Files\Microsoft Visual Studio 8\VC\redist\x86\Microsoft.VC80.CRT de la máquina con Windows XP (donde desarrollé y construí foo.exe) aC:\foo de la máquina con Windows Server 2003 (donde estoy tratando de ejecutarlo).

La cuarta línea del archivo de manifiesto se veía así:

<assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.6195"
                  processorArchitecture="x86"
                  publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>

Esta vez podría ejecutar C: \ foo \ foo.exe sin ningún problema.

Pregunt

Esperaba que la instalación de 'Microsoft Visual C ++ 2005 SP1 Redistributable' (vcredist_x86.exe) como se describe en el segundo enfoque lo solucionaría. Pero no fue así. Copiar las DLL y los archivos de manifiesto deC:\Program Files\Microsoft Visual Studio 8\VC\redist\x86\Microsoft.VC80.CRT carpeta de la máquina de desarrollo lo arregló. ¿Por qué fue así?

Opciones de construcción

En caso de que te ayude a responder mi pregunta. Aquí están las opciones de compilador y enlazador que tomé de las propiedades del proyecto de Visual Studio:

Propiedades de configuración> C / C ++> Línea de comando:

/O2 /GL /D "_MBCS" /FD /EHsc /MD /Fo"Release\\" /Fd"Release\vc80.pdb" /W3 /nologo /c /Wp64 /Zi /TP /errorReport:prompt

Propiedades de configuración> Enlace> Línea de comando:

/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

Respuestas a la pregunta(14)

Su respuesta a la pregunta