Visual Studio 2005 Sicherheits-updates und CRT-DLL-Versionen in manifest
Neuesten Visual Studio 2005 Sicherheits-updates verursachen Probleme für uns.
Wir erstellen und intern verteilen SDKs in C++ geschrieben. Diese SDKs sind eine Sammlung von header-Dateien und statische Bibliotheken nur. Nach der Installation des Sicherheitsupdates unsere SDKs hängt jetzt auf die neueren Versionen der Microsoft Visual C ++ CRT-DLLs. Diese SDKs verwendet werden downstream-Projekte, die EXE-Dateien.
Wenn man diese EXE-Dateien wird gebaut mit einem mix von SDKs (einige aus der Zeit vor den Sicherheits-updates, die einige danach), dann die EXE-Datei produziert, verweist auf zwei Sätze von MSVC-runtime-DLLs. E. g:
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.4053" processorArchitecture="amd64" publicKeyToken="1fc8b3b9a1e18e3b">
</assemblyIdentity>
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.762" processorArchitecture="amd64" publicKeyToken="1fc8b3b9a1e18e3b">
</assemblyIdentity>
</dependentAssembly>
</dependency>
</assembly>
Bedeutet dies, dass zur Laufzeit diese EXE-Datei wird mit beiden Versionen der DLL? Bedeutet das, dass wir uns verteilen müssen beide Versionen von der MSVC-Runtime-DLLs mit dieser EXE?
Gibt es einen einfachen Weg, um dieses problem zu vermeiden, ohne dass alle SDKs werden mit Visual Studio 2005 Sicherheits-patches in Ort? (Dies wäre nicht wünschenswert, für einige der älteren und sehr stabil-SDKs, die wir nicht wollen, um wieder aufzubauen unnötig)
Ist möglich einfach schreiben die manifest-Datei, die entweder auf die SDKs oder die endgültige EXE-Datei, so dass nur eine version des MSVC-CRT-DLLs sind erwähnt?
Mein Verständnis ist, dass die relevanten updates sind wie folgt:
Security update für Microsoft Visual Studio 2005 Service Pack 1: KB971090
http://go.microsoft.com/fwlink/?LinkId=155934
Security update für Microsoft Visual Studio 2008 Service Pack 1: KB971092
http://go.microsoft.com/fwlink/?LinkID=155933
Habe ich entdeckt, zwei andere Fragen, die ähnlich sind:
VC++: KB971090 und wählen Sie Visual C-Runtime-DLL-Abhängigkeiten
- warum wurde diese Umstellung auf community-wiki?
Du musst angemeldet sein, um einen Kommentar abzugeben.
1) es heißt ja, die Laufzeit ist mit beiden Versionen - etwas, was Sie nie wollen, zu geschehen. Es sollten immer nur reference nur eine einzige version der DLL(s)
2) Es ist eine Methode, die ich entwickelt habe, um Kraft der version die SP1-version (ohne Sicherheitsupdates). Ich umrissen habe es hier
3) Sie könnten deaktivieren Sie manifestiert sich ganz und machen Sie mit der hand, aber ich weiß nicht empfehlen, es ist ein Schmerz zu pflegen unterschiedlicher Manifest-Dateien für Ihre debug-und release -, und es ist eine fehleranfällige Art und Weise des Umgangs mit dem problem. Es wäre besser, verwenden Sie die Problemumgehung, die ich erwähnt in (2) oben.
Als Ted sagt, zur Laufzeit ausführbaren versuchen werden, beide Versionen der DLL. Dies ist wahrscheinlich, weil Sie noch nicht vollständig kompiliert das gesamte Projekt (oder Sie verwenden einen externen Bibliotheken kompiliert wurde, hing von dem .762 Laufzeit).
Die gute Nachricht ist, dass, wenn beide diese Bibliotheken installiert sind, auf Ihren client-Systemen, dann die side-by-side redirection policy bedeutet, dass nur die neueste geladen wird. Weitaus mehr schädlichen Nebenwirkungen, die Sie bemerken werden, ist, wenn nur einer installiert ist (wahrscheinlich .762), dass die Anwendung wird nicht gestartet mit der alten "Anwendung nicht korrekt konfiguriert ist, eine Neuinstallation könnte das problem beheben" - Fehlermeldung.
Bedeutet das, dass wir uns verteilen müssen beide Versionen von der MSVC-Runtime-DLLs mit dieser EXE?
Ist die einfachste Lösung für dich wäre wahrscheinlich zu versenden gerade die neueste version von visual c++ runtime redistributable, die Sie bekommen können aus dem folgenden link.
http://download.microsoft.com/download/6/B/B/6BB661D6-A8AE-4819-B79F-236472F6070C/vcredist_x86.exe
Kann es sein, ein bisschen Schmerz, weil es der Benutzer aufgefordert wird, klicken Sie auf "ich Stimme zu" auf einer EULA-Seite und erfordert admin priveledges aber durch Allgemeine Konsens, es ist die beste option, wenn man die Benutzer, um es zu installieren.