Por que a instalação do vcredist_x86.exe não corrige o erro SideBySide quando eu desenvolvo um EXE em uma máquina e o executo em outr

Questã

Escrevi um projeto C ++ chamado 'Foo' usando o Microsoft Visual Studio 2005 Verison 8.0.50727.762 (SP.050727-7600) no Windows XP Professional Versão 2002 Service Pack 3. Criei o projeto no Foo.exe. Em seguida, copiei o arquivo Foo.exe em um Windows Server 2003 Enterprise Edition Service Pack 2. Quando tentei executá-lo, ele falhou com este erro,

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

No Visualizador de Eventos> Sistema, três eventos foram registrado

ID do evento: 32; Fonte: SideBySide

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

ID do evento: 59; Fonte: SideBySide

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

ID do evento: 59; Fonte: SideBySide

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

A instalação do Microsoft Visual C ++ 2005 Redistributable não o corrigiu

Downloaded vcredist_x86.exe dehttp: //www.microsoft.com/download/en/details.aspx? id = 3387Installed it. O instalador criou uma pasta chamadaC:\windows\winsxs\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_0de06acd.

A versão deste software, encontrada em 'Adicionar ou remover programas', era '8.0.50727.42'

Ao tentar executar o C: \ foo \ foo.exe, obtive os mesmos erros que descrevi acim

A instalação do Microsoft Visual C ++ 2005 SP1 Redistributable não o corrigiu

Downloaded vcredist_x86.exe dehttp: //www.microsoft.com/download/en/details.aspx? id = 5638Installed it. O instalador criou uma pasta chamada:C:\windows\winsxs\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6b128700.

A versão deste software, encontrada em 'Adicionar ou remover programas', era '8.0.56336'

Ao tentar executar o C: \ foo \ foo.exe, obtive os mesmos erros que descrevi acim

cópia de DLLs de CRT e o manifesto da mesma máquina (onde estou executando o EXE) não foram corrigido

Eu copieimsvcm80.dll, msvcp80.dll emsvcr80.dll a partir deC:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_0de06acd paraC:\foo.Próximo, eu copieiC:\WINDOWS\WinSxS\Manifests\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_0de06acd.manifest paraC:\foo e renomeou-o paraMicrosoft.VC80.CRT.manifest.

A quarta linha do arquivo de manifesto ficou assim:

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

Quando tentei executar o C: \ foo \ foo.exe desta vez, não funcionou. Repeti essa coisa novamente com as DLLs emC:\windows\winsxs\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6b128700 e o arquivo de manifesto correspondente. Também não ajudou. Eu recebi o mesmo erro.

Nos dois casos, obtive os seguintes erros em Visualizador de Eventos> Sistem

ID do evento: 34; Fonte: SideBySide

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

ID do evento: 58; Fonte: SideBySide

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

ID do evento: 59; Fonte: SideBySide

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

cópia de DLLs de CRT e o manifesto da máquina Windows XP (onde eu criei o EXE) não foram corrigido

Eu copieimsvcm80.dll, msvcp80.dll emsvcr80.dll a partir deC:\winnt\winsxs\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6b128700 da máquina Windows XP (onde desenvolvi e construí foo.exe) paraC:\foo do Windows Server 2003 (onde estou tentando executar o arquivo foo.exePróximo, eu copieiC:\winnt\winsxs\Manifests\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6b128700.manifest paraC:\foo e renomeou-o paraMicrosoft.VC80.CRT.manifest.

A quarta linha do arquivo de manifesto ficou assim:

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

Ao tentar executar o C: \ foo \ foo.exe agora, tenho os mesmos erros mencionados na seção anterio

cópia de DLLs de CRT e o manifesto da pasta Visual Studio o corrigira

Copiedmsvcm80.dll, msvcp80.dll, msvcr80.dll eMicrosoft.VC80.CRT.manifest a partir deC:\Program Files\Microsoft Visual Studio 8\VC\redist\x86\Microsoft.VC80.CRT da máquina Windows XP (onde desenvolvi e construí foo.exe) paraC:\foo da máquina Windows Server 2003 (onde estou tentando executá-la

A quarta linha do arquivo de manifesto ficou assim:

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

Desta vez, eu poderia executar o C: \ foo \ foo.exe sem problema

Questã

Eu esperava que a instalação do 'Microsoft Visual C ++ 2005 SP1 Redistributable' (vcredist_x86.exe), conforme descrito na segunda abordagem, o corrigisse. Mas isso não aconteceu. Copiando as DLLs e os arquivos de manifesto doC:\Program Files\Microsoft Visual Studio 8\VC\redist\x86\Microsoft.VC80.CRT pasta @ da máquina de desenvolvimento o corrigiu. Por que foi assim?

Opções de compilação

No caso, ajuda você a responder minha pergunta. Aqui estão as opções de compilador e vinculador que peguei nas propriedades do projeto Visual Studio:

Propriedades de configuração> C / C ++> Linha de Comandos:

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

Propriedades de configuração> Vinculador> Linha 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

questionAnswers(14)

yourAnswerToTheQuestion