Napisałem projekt C++ o nazwie 'foo' przy użyciu Microsoft Visual Studio 2005 Verison 8.0.50727.762 (SP.050727-7600) w systemie Windows XP Professional z dodatkiem Service Pack 3. Wersja 2002 zbudowałem projekt na Foo .exe. Potem skopiowany plik foo.exe do 2003 Enterprise Edition z dodatkiem Service Pack Windows Server 2. Kiedy próbowałem go uruchomić, to nie udał się ten błąd,
C:\foo.exe
The application has failed to start because the application configuration is incorrect.
Reinstalling the application may fix the problem.
W Podglądzie zdarzeń> System trzy wydarzenia były rejestrowane .
Identyfikator zdarzenia: 32; Źródło: SideBySide
Dependent Assembly Microsoft.VC80.CRT could not be found and Last Error was
The referenced assembly is not installed on your system.
Identyfikator zdarzenia: 59; Źródło: SideBySide
Resolve Partial Assembly failed for Microsoft.VC80.CRT.
Reference error message: The referenced assembly is not installed on your system.
Identyfikator zdarzenia: 59; Źródło: SideBySide
Generate Activation Context failed for C:\foo\Foo.exe.
Reference error message: The referenced assembly is not installed on your system.
Instalacja programu Microsoft Visual C++ 2005 Redistributable nie rozwiąże to
- Pobrano vcredist_x86.exe z http://www.microsoft.com/download/en/details.aspx?id=3387
- zainstalowany. Instalator utworzył folder o nazwie
C:\windows\winsxs\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_0de06acd
.
Wersja tego oprogramowania z "Dodaj lub usuń programy" to "8.0.50727.42".
Próbując uruchomić C: \ foo \ foo.exe, otrzymałem te same błędy, które opisałem powyżej.
Instalacja Microsoft Visual C++ 2005 SP1 Redistributable nie rozwiąże to
- Pobrano vcredist_x86.exe od http://www.microsoft.com/download/en/details.aspx?id=5638
- zainstalowany. Instalator utworzył folder o nazwie:
C:\windows\winsxs\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6b128700
.
Wersja tego oprogramowania z "Dodaj lub usuń programy" to "8.0.56336".
Próbując uruchomić C: \ foo \ foo.exe, otrzymałem te same błędy, które opisałem powyżej.
Kopiowanie plików DLL CRT i plików manifestu z tego samego komputera (w którym działa plik EXE) nie rozwiązało problemu.
- skopiowane
msvcm80.dll
,msvcp80.dll
imsvcr80.dll
zC:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_0de06acd
doC:\foo
. - Następnie skopiowałem
C:\WINDOWS\WinSxS\Manifests\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_0de06acd.manifest
naC:\foo
i zmieniłem nazwę naMicrosoft.VC80.CRT.manifest
.
Czwarta linia pliku manifestu wyglądał następująco:
<assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.42"
processorArchitecture="x86"
publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
Kiedy próbowałem z systemem C: \ foo \ foo.exe tym czasie, to nie działa. Powtórzyłem tę rzecz ponownie z bibliotekami DLL w C:\windows\winsxs\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6b128700
i odpowiednim pliku manifestu. To też nie pomogło. Mam ten sam błąd.
W obu przypadkach wystąpiły następujące błędy w Podglądzie zdarzeń> System.
Identyfikator zdarzenia: 34; Źródło: SideBySide
Component identity found in manifest does not match the identity of the component requested
Identyfikator zdarzenia: 58; Źródło: SideBySide
Syntax error in manifest or policy file "C:\foo\Microsoft.VC80.CRT.MANIFEST" on line 4.
Identyfikator zdarzenia: 59; Źródło: SideBySide
Generate Activation Context failed for C:\foo\Foo.exe. Reference error message: The manifest file contains one or more syntax errors.
Kopiowanie CRT DLL i manifestu z maszyny Windows XP (gdzie zbudował EXE) nie naprawić.
- skopiowane
msvcm80.dll
,msvcp80.dll
imsvcr80.dll
zC:\winnt\winsxs\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6b128700
na komputerze z Windows XP (gdzie opracowany i zbudowany foo.exe) doC:\foo
systemu Windows Server 2003 (gdy próbuję uruchomić foo.exe). - Następnie skopiowałem
C:\winnt\winsxs\Manifests\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6b128700.manifest
naC:\foo
i zmieniłem nazwę naMicrosoft.VC80.CRT.manifest
.
Czwarta linia pliku manifestu wyglądał następująco:
<assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.762"
processorArchitecture="x86"
publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
On próbuje uruchomić C: \ foo \ foo.exe teraz mam te same błędy, o których mowa w poprzednim punkcie.
Skopiowanie bibliotek DLL CRT i manifest z folderu Visual Studio naprawiło to.
- Skopiowane
msvcm80.dll
,msvcp80.dll
,msvcr80.dll
iMicrosoft.VC80.CRT.manifest
zC:\Program Files\Microsoft Visual Studio 8\VC\redist\x86\Microsoft.VC80.CRT
na komputerze z Windows XP (gdzie opracowany i zbudowany foo.exe) doC:\foo
maszyny Windows Server 2003 (gdy próbuję go uruchomić).
Czwarta linia pliku manifestu wyglądał następująco:
<assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.6195"
processorArchitecture="x86"
publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
Tym razem mogłem uruchomić C: \ foo \ foo.exe bez żadnych problemów.
Pytanie
Spodziewałem się, że instalacja 'Microsoft Visual C++ 2005 SP1 Redistributable' (vcredist_x86.exe), jak opisano w drugim podejściem byłoby to naprawić. Ale tak się nie stało.Skopiowanie plików DLL i plików manifestu z folderu C:\Program Files\Microsoft Visual Studio 8\VC\redist\x86\Microsoft.VC80.CRT
w maszynie programistycznej rozwiązało problem. Dlaczego tak było?
opcje Zbuduj
W przypadku, pomaga odpowiedzieć na moje pytanie. Oto opcje kompilatora i linkera Podniosłem z Visual właściwości projektu Studio:
właściwości konfiguracyjne> C/C++> Wiersz poleceń:
/O2 /GL /D "_MBCS" /FD /EHsc /MD /Fo"Release\\" /Fd"Release\vc80.pdb" /W3 /nologo /c /Wp64 /Zi /TP /errorReport:prompt
właściwości konfiguracyjne> Linker> Wiersz poleceń:
/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
Możesz rozpoznać numery wersji.Twój komputer ma wersję 6195, ale wersje redystów, których używałeś, są bardzo stare: 42 i 762. Od czasu wydania SP1 było kilka poprawek zabezpieczeń. Najprościej jest po prostu stworzyć projekt instalacji. –
[This] (http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=26347) jest prawdopodobnie tym, czego szukasz. – Luke
Najprostszym sposobem na sprawdzenie wersji redystu wymaganej dla mojej kompilacji było sprawdzenie pliku manifestu utworzonego przez Visual Studio podczas budowania projektu. Mój znajdował się w 'Mine znajdował się na C: \ Foo \ Release \ Foo.exe.intermediate.manifest'. Rozwinąłem to w mojej odpowiedzi na moje własne pytanie poniżej. –