34 Stimmen

Wie man Dateien in einer EXE speichert

Alright, also ich arbeite an der Programmierung meiner eigenen Installer in C#, und was ich tun möchte, ist etwas entlang der Linien der Dateien in der .exe, so dass ich tun kann File.Copy(file, filedir);

Oder gibt es, falls dies nicht möglich ist, eine andere Möglichkeit, das zu tun, was ich vorhabe?

0 Stimmen

Nur aus Neugierde: Warum programmieren Sie Ihr eigenes Installationsprogramm?

39 Stimmen

Die Leute sagen immer: "Wenn du eine Sprache lernen willst, musst du sie kodieren", bis du tatsächlich etwas kodierst, und dann heißt es: DON'T REINVENT TEH WHEEEEEEL

1 Stimmen

Es ist nichts dagegen einzuwenden, Programmieren zu lernen, aber beim Schreiben von Produktionscode sollte man das Rad nicht neu erfinden.

33voto

Shawn Miller Punkte 7007

Ich würde mein eigenes Installationsprogramm nicht programmieren, aber wenn Sie wirklich Dateien in Ihre Baugruppe einbetten wollen, können Sie stark typisierte Ressourcen verwenden. Öffnen Sie im Eigenschaften-Dialog Ihres Projekts die Registerkarte "Ressourcen" und fügen Sie Ihre Datei hinzu. Sie werden dann in der Lage sein, die Datei mit zu erhalten:

ProjectNamespace.Properties.Resources.MyFile

Dann können Sie die eingebettete Ressource mit auf die Festplatte schreiben:

System.IO.File.WriteAllBytes(@"C:\MyFile.bin", ProjectNamespace.Properties.Resources.MyFile);

0 Stimmen

Vielen Dank für Ihre Antwort, das ist es, wonach ich suche. In Ordnung, also ich bin mit File.Copy(); und ich brauche eine String-Überladung für den Filepath. Irgendwelche Vorschläge PS- Versucht .ToString();

0 Stimmen

Was stimmt nicht mit dem c#-Projekt, auf das ich Sie oben verlinkt habe, komplett mit Quellcode? Ist das nicht das, wonach Sie suchen?

0 Stimmen

Aktualisiert, um zu zeigen, wie Sie die Datei dann mit System.IO.File.WriteAllBytes auf die Festplatte schreiben können

9voto

Erik Funkenbusch Punkte 91649

Ehrlich gesagt würde ich Ihnen empfehlen, KEIN eigenes Installationsprogramm zu erstellen. Es gibt viele, viele Probleme bei der Erstellung von Installationsprogrammen. Selbst die großen Hersteller von Installationsprogrammen erstellen keine eigenen Installationsprogramme mehr, sondern nur noch benutzerdefinierte MSI-Pakete.

Verwenden Sie Mirosoft Installer (MSI). Das ist der richtige Weg. Erstellen Sie Ihr eigenes benutzerdefiniertes Frontend dafür, aber erschaffen Sie nicht das bereits sehr komplexe Rad neu, das bereits existiert.

UPDATE: Wenn Sie dies nur zu Lernzwecken tun, würde ich mich davor scheuen, es als "Installationsprogramm" zu betrachten. Sie könnten versucht sein, Ihre "Forschung" zu übernehmen und sie eines Tages zu verwenden, und offen gesagt, so enden wir mit so vielen Problemen, wenn neue Versionen von Windows herauskommen. Die Leute schaffen sich ihre eigenen Räder mit Annahmen, die nicht zutreffend sind.

Was Sie wirklich vorhaben, nennt sich "Paketierung", und Sie müssen sich mit dem Executable PE-Format vertraut machen, denn es geht darum, die Struktur des PE-Images auf der Festplatte zu verändern.

Man kann es bis zu einem gewissen Grad simulieren, indem man Dateien in Ressourcen ablegt, aber das ist nicht wirklich das, was Installationsprogramme oder Selbstextraktoren tun.

Hier ist ein Link zu Selbstentferner Tutorium, aber es ist nicht in C#.

Ich weiß nicht genug über die Anforderungen der .NET PE, um zu wissen, ob Sie dies mit einer ausführbaren Datei mit verwaltetem Code tun können oder nicht.

UPDATE2: Das ist wahrscheinlich eher das, wonach Sie suchen, es bettet Dateien in die Ressource ein, aber wie gesagt, es ist nicht wirklich die Art und Weise, wie professionelle Installateure oder Selbstextraktoren es tun. Ich glaube, es gibt verschiedene Beschränkungen dafür, was man als Ressourcen einbetten kann. Aber hier ist der Link zu einer Selbst-Extrahierer Demo geschrieben in C#.

1 Stimmen

Ich würde auf jeden Fall alle verfügbaren Installateure recherchieren, BEVOR ich meinen eigenen Text schreibe. Das ist in etwa das, worüber ich in "Erfinde das Rad nicht neu, es sei denn, du willst mehr über Räder lernen" gesprochen habe. codinghorror.com/blog/archives/001145.html

0 Stimmen

Der einzige Grund, warum ich dort war, war, um zu sehen, ob ich es kann. Ich versuche nicht, es zu machen adv oder irgendetwas, nur versuchen, 1 Form, dass, wenn Sie auf Installieren und es legt nur die Dateien in ein Verzeichnis zu erstellen.

1 Stimmen

S3thst4, auf jeden Fall tun die Forschung auf verfügbare Installateure, aber lassen Sie nicht die Pessimisten Sie weg, die meisten verfügbaren Installateure lassen viel zu wünschen übrig, vor allem MSI, es gibt definitiv Raum für massive Verbesserung, Installateure sind kein Spaziergang im Park aber, für harte Arbeit vorbereitet werden.

4voto

Ray Booysen Punkte 26896

Ich rate hier, aber wenn Sie versuchen, Ressourcen vor der Kompilierung in Ihrer Anwendung zu speichern, können Sie im Projekt-Explorer mit der rechten Maustaste auf eine Datei klicken, die Sie hinzufügen möchten, Eigenschaften wählen und den Typ in eingebettete Ressource ändern.

Sie können dann später auf die eingebetteten Ressourcen zugreifen, indem Sie die Anweisungen in diesem KB verwenden: http://support.microsoft.com/kb/319292

0voto

Falls Sie einfach nur mehrere Dateien in einem einzigen Dateispeicher speichern (und von dort aus Dateien extrahieren, interagieren usw.) möchten, sollten Sie sich vielleicht auch NFileStorage ansehen, ein .net-Dateispeicherung . geschrieben in 100% .NET C# mit allen Quellen enthalten. Es kommt auch mit einem Befehlszeileninterpreter, der die Interaktion über die Befehlszeile ermöglicht.

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