Erstellen und bereitstellen von dll unter windows: SxS, manifestiert, und all that jazz
Seit VS 2005, sehe ich, dass es nicht möglich ist einfach eine dll erstellen, die gegen MS-Laufzeitumgebung und stellen Sie Sie zusammen (http://www.ddj.com/windows/184406482). Ich bin zutiefst verwirrt manifestieren, SxS und co: MSDN-Dokumentation ist wirklich arm, mit zirkulären Referenzen; speziell seit dem bin ich mehr ein Unix-guy, ich finde alle diese Informationswert. Mein Kernproblem ist die Verknüpfung eine dll gegen msvc9 oder msvc8: da die Laufzeit nicht verteilbaren, was sind die Schritte, um zu verbinden und bereitstellen, wie eine dll ? Insbesondere, wie werden die das manifest erzeugt (ich will nicht mt.exe ich möchte etwas, das portabel Compiler), wie sind Sie eingebettet sind, verwendet ? Was bedeutet Side-by-side-Montage bedeuten ?
Grundsätzlich wo kann ich die finden jede Art von Spezifikation anstelle von MS-jargon ?
Danke an alle die geantwortet, das war wirklich hilfreich,
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden wir eine einfache include-Datei in allen unseren Anwendungen & DLL ' s, vcmanifest.h, dann setzen alle Projekte auf eingebetteten manifest-Datei.
vcmanifest.h
Die einfachste Sache zu tun:
Unter der Annahme einer Standard-Installation von VS2005, Sie haben ein Pfad wie:
Gehen, packen Sie die Dateien in diesem Ordner redist, und platzieren Sie die .manifest UND die msvcr80.dll (zumindest) in Ihren Anwendungen .exe-Ordner.
Diese Dateien in das root der installation, sollte Ihre exe und alle dlls gelinkt gegen Sie, arbeiten einwandfrei ohne Rückgriff auf merge Module, MSIs oder sogar jede Art von just-in-time-Erkennung, die die Laufzeitumgebung nicht installiert ist.
Hier ist der blog Eintrag erläutert das rational hinter der SxS-crt Entscheidung für VC++. Er umfasst das erklären, wie schlimm es ist zu statisch link crt, und warum sollten Sie das nicht tun.
Hier ist die Dokumentation auf, wie Sie die statische Verknüpfung der crt.
Gut, ich habe festgestellt, einige dieser Fragen, so dass vielleicht einige meiner Kommentare wird hilfreich sein.
Werden Sie wahrscheinlich wollen, um zu testen auf Vista um sicherzustellen, dass dieses ordnungsgemäß funktioniert.
Sie sind redistributable-und Sie haben redistributable Pakete im msvs-Verzeichnis.
Bauen mit Laufzeit von Ihrer Wahl, fügen Sie die entsprechende Verpackung, um den installer und nicht die Mühe - es wird funktionieren. Der Unterschied ist - Sie sind installiert in einem anderen Ort jetzt (aber das ist auch, wo Ihre app Aussehen wird für Bibliotheken).
Sonst, MSDN oder im Grunde jeder nicht-zu-alt-Buch-auf-windows-c++ - Programmierung.
Danke für die Antwort. Für die Bereitstellung per se, ich sehe 3 Optionen, und dann:
Können Sie nicht verwenden Sie die VC++8 SP1/9 CRT als ein merge-Modul unter windows Vista und windows Server 2008 wenn Sie Dienstleistungen, die Sie wollen, um zu starten oder Programme, die Sie ausführen möchten, bevor Sie die "InstallFinalize" - Aktion in der MSI.
Dies ist, weil die dlls installiert sind im Ordner WinSXS in der "InstallFinalize" - Aktion.
Aber die MSI-Datei "ServiceStart" action-kommt vor diesem.
Also entweder einen bootstrapper "http://www.davidguyer.us/bmg/publish.htm"
Oder suchen Sie mit der installer chainging im installer 4.5. Aber das heißt, Sie müssen ein bootstrapper zur Installation 4.5, so scheint es ein wenig sinnlos..
Wenn Sie beabsichtigen, Sie zum bereitstellen der Microsoft-DLLs/.manifest-Dateien und Java-JNI dann werden Sie brauchen, um Sie in das bin-Verzeichnis Ihrer JDK/JRE.
Wenn Sie die app in JBoss, dann legen Sie Sie im Verzeichnis JBoss/bin.
Können Sie Ihre JNI-DLL, die für Ihre Anwendung geeignet ist.