7 Stimmen

.NET: eine EXE-Datei in mein Projekt einbetten

Ich weiß, dass ist seltsam Situation, aber ich brauche, um eine EXE-Datei (oder der Assembly-Code) in mein Projekt einbetten, so dass es nur durch die Anwendung gestartet werden kann (es kann nicht die EXE im Dateisystem erstellen und starten)...

Ist das möglich?

Bearbeiten:

Es ist keine .NET EXE. Jedenfalls habe ich die Datei Test.exe als Ressource zu meinem Projekt hinzugefügt und Folgendes getan

   Dim exestr As Stream = Nothing
   Dim a As Assembly = Assembly.GetExecutingAssembly
   exestr = a.GetManifestResourceStream("Test.exe")

5voto

Hans Passant Punkte 894572

Nicht möglich. Dies war eine zentrale Designentscheidung von Dave Cutler und Co, als sie Windows NT entwickelten. Ein Prozess muss durch eine Datei im Dateisystem gesichert werden. Windows verwendet eine speicherabgebildete Datei, um den Code des Prozesses dem virtuellen Speicher zuzuordnen. Dies ist bei einem .NET-Programm nicht anders, auch wenn ein großer Teil des Codes in den Speicher kompiliert wird (JIT). Die Baugruppe, die die AWL enthält, wird auf dieselbe Weise abgebildet.

Dies ist nicht nur für einen effizienten Betrieb des Betriebssystems von Vorteil, sondern auch für Benutzer und Virenscanner, die es nicht mögen, wenn ausführbarer Code aus dem Nichts auftaucht.

4voto

SLaks Punkte 832502

Wenn die EXE eine .Net-Assembly ist, können Sie die kompilierte Binärdatei in Ihr (äußeres) Programm einbetten, sie mit Assembly.Load(byte[]) . EDIT : Da das nicht der Fall ist, können Sie das nicht.

Nachdem Sie die Baugruppe geladen haben, können Sie Funktionen aus der inneren Baugruppe aufrufen (z. B. die Main Methode) wie jede andere Assembly, oder Sie können schreiben AppDomain.CurrentDomain.ExecuteAssembly(innerAssembly.FullName) .

2voto

John K Punkte 27878

Ich denke über die Erstellung eines RAM-Disk , schreiben Sie Ihre Exe-Datei(en) aus Ihrer .NET-Ressourcendatei dorthin und führen Sie die Datei dort aus. Nichts berührt die physische Festplatte.

Ich habe keinen Link für eine programmierbare RAM-Disk-API, aber Sie können wahrscheinlich etwas finden, das Sie von Ihrem Programm aus manipulieren können. Der andere Vorteil ist, dass Virenscanner sie aus Sicherheitsgründen trotzdem erkennen können.

Außerdem denke ich, wenn Ihre Anwendung auf der Festplatte läuft, dann gibt es keinen guten Grund, warum die ausführbare Datei in Frage nicht auch auf der Festplatte sein kann. Wenn Sie es in über das Netzwerk (Download) es oder etwas, dann piping zuerst auf der Festplatte speichern und nach der Ausführung löschen .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X