wake-up-neo.net

Warum behebt die Installation von vcredist_x86.exe den SideBySide-Fehler nicht, wenn ich eine EXE-Datei auf einem Computer entwickle und auf einem anderen Computer ausführen?

Problem

Ich habe ein C++ - Projekt namens "Foo" geschrieben, das Microsoft Visual Studio 2005 Verison 8.0.50727.762 (SP.050727-7600) unter Windows XP Professional Version 2002 Service Pack 3 verwendet. Ich habe das Projekt in Foo.exe erstellt. Dann kopierte ich die Datei "Foo.exe" in ein Service Pack 2 für Windows Server 2003 Enterprise Edition. Als ich versuchte, sie auszuführen, schlug diese Fehlermeldung fehl.

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

In der Ereignisanzeige> System wurden drei Ereignisse protokolliert.

Ereignis-ID: 32; Quelle: SideBySide

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

Ereignis-ID: 59; Quelle: SideBySide

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

Ereignis-ID: 59; Quelle: SideBySide

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

Die Installation von Microsoft Visual C++ 2005 Redistributable hat das Problem nicht behoben

  1. Heruntergeladene vcredist_x86.exe von http://www.Microsoft.com/download/de/details.aspx?id=3387
  2. Installiert es Das Installationsprogramm hat einen Ordner mit dem Namen C:\windows\winsxs\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_0de06acd erstellt.

Die unter 'Software' gefundene Version dieser Software lautet '8.0.50727.42'.

Beim Versuch, C:\foo\foo.exe auszuführen, erhielt ich die gleichen Fehler, die ich oben beschrieben habe.

Das Installieren von Microsoft Visual C++ 2005 SP1 Redistributable hat das Problem nicht behoben

  1. Heruntergeladene vcredist_x86.exe von http://www.Microsoft.com/download/de/details.aspx?id=5638
  2. Installiert es Das Installationsprogramm hat einen Ordner mit dem Namen C:\windows\winsxs\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6b128700 erstellt.

Die unter "Software" gefundene Version dieser Software lautete "8.0.56336".

Beim Versuch, C:\foo\foo.exe auszuführen, erhielt ich die gleichen Fehler, die ich oben beschrieben habe.

Das Kopieren von CRT-DLLs und -Manifest von demselben Computer (auf dem ich die EXE-Datei ausführte) hat das Problem nicht behoben.

  1. Ich habe msvcm80.dll, msvcp80.dll und msvcr80.dll von __.C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_0de06acd auf C:\foo kopiert.
  2. Als Nächstes habe ichC:\WINDOWS\WinSxS\Manifests\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_0de06acd.manifesttoC:\foo kopiert und in Microsoft.VC80.CRT.manifest umbenannt.

Die vierte Zeile der Manifestdatei sah folgendermaßen aus:

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

Als ich dieses Mal versucht habe, C:\foo\foo.exe auszuführen, hat es nicht funktioniert. Ich wiederholte dieses Ding noch einmal mit den DLLs in C:\windows\winsxs\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6b128700 und der entsprechenden Manifestdatei. Es hat auch nicht geholfen. Ich habe den gleichen Fehler bekommen.

In beiden Fällen wurden in Ereignisanzeige> System die folgenden Fehler angezeigt.

Ereignis-ID: 34; Quelle: SideBySide

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

Ereignis-ID: 58; Quelle: SideBySide

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

Ereignis-ID: 59; Quelle: SideBySide

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

Das Kopieren von CRT-DLLs und -Manifest von Windows XP (wo die EXE-Datei erstellt wurde) wurde nicht behoben.

  1. Ich habe msvcm80.dll, msvcp80.dll und msvcr80.dll von C:\winnt\winsxs\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6b128700 von Windows XP kopiert (auf dem ich foo.exe entwickelt und gebaut habe) Auf C:\foo von Windows Server 2003 (auf dem ich foo.exe ausführen möchte) .
  2. Als Nächstes habe ichC:\winnt\winsxs\Manifests\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6b128700.manifesttoC:\foo kopiert und in Microsoft.VC80.CRT.manifest umbenannt.

Die vierte Zeile der Manifestdatei sah folgendermaßen aus:

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

Beim Versuch, C:\foo\foo.exe auszuführen, habe ich jetzt die gleichen Fehler erhalten, die im vorherigen Abschnitt erwähnt wurden.

Das Kopieren von CRT-DLLs und -Manifest aus dem Visual Studio-Ordner hat das Problem behoben.

  1. Kopierte msvcm80.dll, msvcp80.dll, msvcr80.dll und Microsoft.VC80.CRT.manifest von C:\Program Files\Microsoft Visual Studio 8\VC\redist\x86\Microsoft.VC80.CRT von Windows XP - Computer (auf dem ich foo.exe entwickelt und erstellt habe) auf C:\foo von Windows Server 2003-Computer (auf dem ich versuche, ihn auszuführen).

Die vierte Zeile der Manifestdatei sah folgendermaßen aus:

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

Diesmal konnte ich C:\foo\foo.exe ohne Probleme ausführen.

Frage

Ich hatte erwartet, dass die Installation von 'Microsoft Visual C++ 2005 SP1 Redistributable' (vcredist_x86.exe) wie in der zweiten Vorgehensweise beschrieben, das Problem beheben würde. Tat es aber nicht Das Kopieren der DLLs und Manifestdateien aus dem C:\Program Files\Microsoft Visual Studio 8\VC\redist\x86\Microsoft.VC80.CRT-Ordner des Entwicklungscomputers behebte das Problem. Warum war es so?

Build-Optionen

Falls es Ihnen hilft, meine Frage zu beantworten. Hier sind die Compiler- und Linker-Optionen, die ich aus den Visual Studio-Projekteigenschaften abgerufen habe:

Konfigurationseigenschaften> C/C++> Befehlszeile:

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

Konfigurationseigenschaften> Linker> Befehlszeile:

/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

39
Susam Pal

Ich beantworte meine eigene Frage. Anmerkungen zu der Frage von Hans Passant und Luke halfen.

Ich habe Microsoft Visual C++ 2005 Service Pack 1 - MFC-Sicherheitsupdate für weitervertreibbares Paket heruntergeladen und auf dem System installiert, auf dem ich C:\foo\foo.exe ausführen wollte. Die EXE lief danach gut.

Das Installationsprogramm hat die CRT-DLLs in C:\windows\winsxs\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.6195_x-ww_44262b86 platziert. Ja, 8.0.50727.6195 war die Version der CRT-DLLs, nach denen ich gesucht hatte, wie Hans Passant zu Recht sagte.

Die einfachste Möglichkeit, diese Version zu ermitteln, bestand darin, die Manifestdatei zu betrachten, die von Visual Studio generiert wurde, während mein Projekt auf dem Entwicklungssystem erstellt wurde. Meine befand sich bei C:\Foo\Release\Foo.exe.intermediate.manifest. Es hatte einen Tag wie diesen:

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

Dies ist also ein Hinweis, dass ich die Version 8.0.50727.6195 der DLLs benötigte. Der Rest war eine Frage der Suche nach der richtigen vcredist_x86.exe, die zufällig in der URL war, die ich im zweiten Absatz erwähnt habe. Die Seite in dieser URL enthält einen Link zu KB2538242 , der die Versionsnummern der DLLs zeigt, die vom Installationsprogramm installiert werden würden.

Hinweis: Wie Elie in einer anderen Antwort zu dieser Frage erwähnt hat, ist es erforderlich, vcredist_x86.exe (nicht vcredist_x64.exe) auf dem System zu installieren, auf dem diese Anwendung installiert werden soll, da dies eine 32-Bit-Anwendung ist unabhängig davon ausgeführt werden, ob es sich bei diesem System um ein 32-Bit-Windows-System oder ein 64-Bit-Windows-System handelt. Wiederum liefert die .manifest-Datei diesen Hinweis im Attribut processorArchitecture.

48
Susam Pal

So beheben Sie dieses Problem:

SieWERDENSTILL Abrufen der Seitenseitenfehler Wenn die verwendete Anwendung 32 Bit ist und Sie versuchen, sie auf einem 64-Bit-Betriebssystem auszuführen, auf dem VC_REDISTx64 installiert ist.

Einfache Lösung, Sie MÜSSEN AUCH DEN VC_REDISTx86 auf den 64-Bit-Betriebssystemen laden

4
Elie

Sie müssen "Microsoft Visual C++ 2005 Service Pack 1 Redistributable Package MFC-Sicherheitsupdate" installieren, das sich hier befindet: http://www.Microsoft.com/en-us/download/details.aspx?id= 26347

3
Weisheng Liu

Ich hatte ein etwas verwandtes Problem. Zwei Entwicklungs XP Maschinen, auf denen VS2005 installiert ist, nennen sie A und B. Ich entwickelte, baute und lief auf A. Dann kopierte ich das gesamte Projekt nach B. Dort wurde es erstellt. Versuchte zu laufen und erhielt die gleichen Fehlermeldungen, die von SusamPal erwähnt wurden. Ich stellte fest, dass es unter B's WinSxS die Manifestationen (und Ordner) x86_Microsoft.VC80.CRT_xxx gab, nicht jedoch die entsprechenden x86_Microsoft.VC80.DebugCRT_xxx (und warum ?!). Ich habe mehrere der von SusamPal beschriebenen Tänze und Beschwörungen erfolglos ausprobiert. Ich habe das Problem durch Kopieren der entsprechenden Ordner aus dem WinSxS von A nach B UND den entsprechenden Manifesten aus den WinSxs\Manifests gelöst. 

3
user1752563

Obwohl meine Bewerbung war 

Developed unter Windows 2k8 R2 x64 mit vs2008 (das msvcm90.dll, msvcp90.dll und msvcr90.dll in C:\Programme (x86)\Microsoft Visual Studio 9.0\VC\redist\AMD64\Microsoft.VC90 enthält .CRT) 

und ran auf Sieg 2k3 SP2 x64, 

msvcm80.dll, msvcp80.dll und msvcr80.dll werden jedoch benötigt.

Nach der Installation von Microsoft Visual C++ 2005 SP1 Redistributable Package (x86) kann die Anwendung ordnungsgemäß installiert und ausgeführt werden.

3
superlee

Für mich war der Side-by-Side-Fehler einfach durch Ändern der Einstellung unter c/c ++ -> Codegenerierung-> Laufzeitbibliothek, machen es MTD, das Multithread-Debug ist

0
shivi