2008-10-07 11 views
15

Ich entwickle in einer Umgebung, die stark eingeschränkt ist, aber die Entwickler haben auch eine strenge Kontrolle über.Visual C++ Redistributables ohne Verwendung von VCRedist_x86.exe

VCRedist_x86.exe - Ein 4MB redistributable - ist kein Spaß (vier Stunden zu übertragen). Ich würde wirklich vorziehen, nur MFC90.dll, msvcm90.dll, msvcp90.dll und msvcr90.dll neu zu verteilen - das ist mehr wie 2Mb. Redistributing Visual C++ Files sagt jedoch:

Es wird nicht unterstützt, C/C++ - Anwendungen neu zu verteilen, die ohne Manifest erstellt werden. Visual C++ - Bibliotheken können nicht von C/C++ - Anwendungen verwendet werden, ohne dass ein Manifest die Anwendung an diese Bibliotheken bindet. Weitere Informationen finden Sie unter Choosing a Deployment Method.

Mein ursprünglicher Plan des Kopierens des DLLs in das Arbeitsverzeichnis des Programms scheint nicht zu Arbeit in dieser schönen neuen Welt der Manifeste.

Meine nächste Vermutung ist es, die Registrierungseinträge zu füllen, die zum Füllen der Dateien in das WinSxS-Verzeichnis benötigt werden, und befülle es selbst (anstatt das 4-Megaprogramm zu verwenden).

[edit] Die Software wird häufig aktualisiert, daher werden DLLs der statischen Verknüpfung stark vorgezogen. [bearbeiten]

Wie kann ich erfolgreich die notwendigen Dateien verteilen, aber den Aufwand niedrig halten?

Antwort

13

Wir verwenden diese: Howto: Deploy VC2008 apps without installing vcredist_x86.exe

Wesentlichen

  • Sie ein Manifest in Ihre EXE-Dateien nicht einbetten.
  • Kopieren Sie die C++ - DLLs und ihre Manifeste in das Verzeichnis Ihrer App.
  • Entfernen Sie den "publicKeyToken" aus allen Manifesten (Ihre und Microsoft).
  • Falls nötig, die Info-Version ändern in Ihrer App Manifest-Dateien, die Microsoft Manifest-Dateien (oder umgekehrt) entsprechen
4

Geben Sie/MT (Multithreaded) für die Einstellung "Laufzeitbibliothek" auf der Compiler-Eigenschaftenseite an. Dies ist eine statische Verknüpfung mit der Laufzeitbibliothek, sodass Sie das Redistributable nicht installieren müssen.

26

[Ich bin der aktuellen SxS-Betreuer bei Microsoft]

würde ich stark vorschlagen gegen Entfernen des PublicKeyToken-Attributs aus Manifesten. Die private Bereitstellung der DLLs funktioniert problemlos, wenn dieses Attribut intakt bleibt. Durch das Entfernen wird jedoch verhindert, dass Ihre App von Sicherheitsupdates profitiert, wenn eine neuere Version des CRT zentral auf dem Zielcomputer installiert wird, da die Abhängigkeiten nicht mehr übereinstimmen.

Also, um es zusammenzufassen: Es ist sicher, Ihr Manifest mit dem Standard einzubetten. Kopieren Sie die CRT-Manifest + DLL-Dateien ohne Änderungen direkt in das Verzeichnis Ihrer ausführbaren Datei. Das ist es. Kompatibel Win2k +.

+3

Hallo Eugene: Heißt das, wenn Sie Ihre App mit lokalen CRT/MFC/etc DLLs und Manifest-Dateien bereitstellen, finden diese Windows-Updates, die diese Dateien betreffen, sie irgendwie in Ihrem Installationsverzeichnis und aktualisieren sie?!?! – HotOil

Verwandte Themen