2008-12-03 4 views
28

Mögliche Duplizieren:
How can a C++ windows dll be merged into a C# application exe?eine exe + dll in eine ausführbare Datei (nicht .NET) Verpackung

Ist jemand bewusst ein Programm, das in mehrere DLL und ein .EXE packen eine ausführbare Datei. Ich spreche hier nicht über .NET, ich spreche von allgemeinen DLLs, von denen ich einige in C++ erzeuge, andere sind externe DLLs, über die ich keine Kontrolle habe.

Mein spezieller Fall ist ein Python-Programm mit pay2exe verpackt, wo ich die andere DLL "verstecken" möchte, indem Sie sie packen. Die Frage ist jedoch allgemein genug.

Die Dinge, die einen Blick auf hatte:

  • ILMerge: spezifisch für .NET
  • NETZ: spezifisch für .NET
  • UPX: tut Kompression DLL aber nicht mehrere DLL + EXE Verpackung
  • FileJoiner:
bekam Fast es. Es kann ausführbare + alles in eine exe packen, aber wenn es geöffnet wird, wird es den Standard-Opener für jede gepackte Datei starten. Wenn also der Benutzer dlldepend installiert ist, wird er gestartet (weil das der Standarddll-Öffner ist).

Vielleicht ist das nicht möglich?


Zusammenfassung der Antworten:

DLL Öffnung durch das Betriebssystem verwaltet wird, so DLL in ausführbarer Verpackung bedeutet, dass irgendwann, müssen sie an einen Ort, extrahiert werden, in denen das Betriebssystem sie finden kann. Keine magische Kugel.

Also, was ich will, ist nicht möglich.

Es sei denn ...

Wir ändern etwas in der OS. Danke, dass Conrad mich auf ThinInstall zeigt, die die Anwendung und den OS-Lademechanismus virtualisieren. Mit ThinInstall ist es möglich, alles in eine EXE zu packen (DLL, Registry-Einstellungen, ...).

+0

Sie können auch boxedapppacker verwenden - ähnlich wie Thinstall. – MastAvalons

+0

oder verwenden BoxedApp SDK - Entwicklerbibliothek für Virtualisierungsdateien und Registrierung – MastAvalons

+0

Kürzlich PELock wurde mit DLL-Bindungsfähigkeit aktualisiert https://www.pelock.com/img/en/products/pelock/virtual-dll-libraries/pelock-virtual- dll-binder.png –

Antwort

5

Werfen Sie einen Blick auf ThinApp ThinApp

+2

sieht so aus als wäre der Link nicht mehr gültig – Kuncevic

+0

@bigb: Es wurde von VMWare erworben: http://en.wikipedia.org/wiki/VMware_ThinApp –

+1

Es funktioniert ... aber für jeden, der diese Option in Betracht zieht, packt ThinApp Ihre Anwendung zusammen mit etwas namens TSASurrogate.exe und in Version 5,1 es ist ** 14 Megabyte **. In dem Fall, den ich mir angesehen habe, hat sich das Programm mehr als verdoppelt. – HostileFork

1

Sie können die DLLs als binäre Ressourcen in Ihrer EXE hinzufügen. Beim Start kann Ihre EXE dann die Ressourcen in einen temporären Ordner extrahieren und die resultierenden DLLs LoadLibrary().

4

Wenn die ausführbare Datei statisch auf die DLL verweist, dh es gibt keine Aufrufe an LoadLibrary, dann glaube ich nicht, dass es irgendwelche Mechanismen gibt, die DLL in die ausführbare Datei zu packen, da die DLL-Load vom OS Application Loader durchgeführt wird zu der aufgerufenen "Haupt" -Funktion. Die einzige Möglichkeit, soweit ich weiß, ist, die exe und dlls in eine andere exe zu bringen. Dieser Wrapper exe entpackt die reale exe und dlls in einen temporären Ordner und startet die exe, löscht die Dateien beim Beenden der exe.

Wenn Sie LoadLibrary/Ex aufrufen, um die DLL zu laden, extrahieren Sie die DLL aus den EXE-Ressourcen in eine Datei vor dem Aufruf an LoadLibrary/Ex.

Das eigentliche Problem ist, dass die LoadLibrary Funktion eine Menge von Adressen zu reparieren, wenn die Bibliothek geladen wird und funktioniert nur beim Laden von einer Datei.

+0

Ich nehme an, die Frage ist "ist es möglich, einen Linker zu schreiben, der Code aus einer DLL in der Art und Weise nimmt, wie Code aus einer LIB-Datei entnommen werden kann und sie der verknüpften EXE hinzufügt"? – Skizz

+0

Der Wrapper .EXE ist der Ansatz, den ich verwende.Offensichtlich müssen Sie heute ein wenig darüber nachdenken, wo Sie alles auspacken - gehen Sie nicht davon aus, dass Sie in \ Programme \ entpacken können ... ohne dass Sie als Administrator ausgeführt werden müssen –

0

MoleBox Pro tut genau das, was Sie wollen, aber es ist Shareware, und, es sei denn Sie eine Vollversion kaufen, verpackt ausführbaren Dateien ein Dialogfeld beim Start zeigen, etwas zu sagen wie „Diese Datei wird von einer Testversion von MoleBox verpackt wurde, verteilen Sie es bitte nicht“

Sie hier downliad können: Leider link

, habe ich nicht in der Lage gewesen, eine vollwertig und freie Lösung zu finden

0

Haben Sie sich meine billige Liste angesehen?

angeblich Es mehr preiswerte (dh eher billig) Werkzeuge sein, die nicht-net DLL App verbinden würde (n) zusammen, wie zum Beispiel:

1.) MoleBox Pro (eu 100) 2.) BitArt Fusion ($ 160) 3.) VB Wrap ($ 100) 4.) PE Bundle ($ 30)

Zusätzlich zu "www.oreans.com" Sie könnten einen Schutz orientiertes Programm-Bundle für eu finden 320, das, , wie sie behaupten, kann Win32 oder ".Net" Dateien zusammen verbinden; Als ich sie jedoch nach einer bestimmten Szenerie fragte, wo ich ihren "XBundler für Win32/.NET" verwenden würde, um eine ".Net" EXE zu packen, und dann würde versuchen, es auf Windos 98 (ohne der Rahmen), sie sagten, es würde nicht funktionieren. :-(

EXE Admirer

0

Mir wurde gesagt, es möglich ist, damit sie verbinden sich zu einem in Linux ein gemeinsam genutztes Objekt Link zu einem anderen gemeinsamen Objekt fragen

Aber es wird nicht für native Windows-DLLs arbeiten Eine Sache, die mir passiert, ist, dass wir einfach den Linker verwenden können, um alle Objs miteinander zu verknüpfen, unabhängig davon, zu welchem ​​Projekt sie ursprünglich gehören.Natürlich müssen sie ähnliche Linkoptionen haben.

5

Werfen Sie einen Blick auf BoxedApp. Viel Glück!

+1

Im Gegensatz zu ThinApp und Evalaze fügt BoxedApp nicht 14 MB zur Anwendungsgröße hinzu, nur ein paar MB. Was gut ist. Es schien jedoch etwas brüchig zu sein. Es konnte nicht UPX-komprimierte EXEs oder DLLs einrahmen, und wenn Sie versuchen, UPXing der resultierenden BoxedApp, die auch nicht funktionieren würde. Sogar unkomprimiert, würde eine Qt-basierte App auf den Rechnern mehrerer Leute hängen, die ich an * gesendet habe (obwohl die unkomprimierte Qt-App sowohl lokal auf Win8 als auch auf XP) *. Ich bin vorsichtig von Closed-Source-Lösungen im Allgemeinen w.r.t. nicht in der Lage sein, Fehler in die eigenen Hände zu nehmen ... aber dieser ist auch teuer. : -/ – HostileFork

1

Sie können Valgrid, Thinstall oder Boxedapp .... Ich bevorzuge letztere.