Daten in der ausführbaren Datei speichern

8

Ich habe eine portable ausführbare Datei, die Daten in einer Datei im selben Ordner wie die ausführbare Datei speichert. Gibt es eine Möglichkeit, dass ich Daten in der ausführbaren Datei selbst speichern kann, wenn ich die App schließe?

Das ist vielleicht komisch, aber ich nehme die Daten mit und habe nur eine Datei für die exe und die Daten wären toll.

Würde es vorziehen, wenn dies mit C # gemacht wurde, aber nicht erforderlich ist.

    
Artur Carvalho 07.09.2010, 18:27
quelle

7 Antworten

3

Sie können Ihre eigene EXE nicht so ändern, dass sie gespeicherte Daten in einem eleganten oder kompakten Format enthält. Zunächst erhält das Betriebssystem eine Sperre für die EXE-Datei, während die darin enthaltene Anwendung ausgeführt wird. Zweitens kommt eine EXE vorkompiliert (zumindest in MSIL), und eine Änderung der Quelldaten der Datei erfordert normalerweise eine Neukompilierung, um verschiedene Zeiger auf Code-Handles zurückzusetzen, oder ein ERNSTES Wissen auf einer sehr esoterischen Ebene darüber, was Sie tun die Datei.

Die allgemein akzeptierten Methoden sind die Anwendungskonfigurationsdatei, eine Ressourcendatei oder eine benutzerdefinierte Datei, die Sie zur Laufzeit erstellen / lesen / ändern, wie Sie es jetzt tun. Zwei Dateien für eine Anwendung sollten kein Grund zur Sorge sein

    
KeithS 07.09.2010, 18:42
quelle
2

Sie können Platz reservieren, indem Sie eine String-Ressource verwenden und aufteilen. Sie müssen ein wenig Detektivarbeit machen, um genau herauszufinden, wo im Offset zur ausführbaren Datei die Daten gespeichert werden sollen, aber seien Sie vorsichtig, die Datei wird " in Verwendung " sein, also fahren Sie fort vorsichtig damit.

    
t0mm13b 07.09.2010 18:35
quelle
1

Sie verwenden also gerade eine Datei app.config (und Settings.settings)? Ich glaube, das ist die kompakteste Art, Daten nahe der .exe-Datei zu speichern.

Ich würde sehr bezweifeln, dass Sie das Manifest der .exe oder eines anderen Teils davon ändern können.

Edit: Anscheinend könnte es doch einige Wege geben: Ссылка

    
Bertvan 07.09.2010 18:31
quelle
1

Es gibt eine Möglichkeit, mehrere Streams zu verwenden, aber nur in NTFS-Dateisystemen. Mit NTFS können Sie alternative "benannte" Streams in einer Datei definieren. Der übliche Inhalt ist im main = unbenannten Stream. Es hat etwas mit den zusätzlichen Informationen zu tun, die Sie sehen können, wenn Sie mit der rechten Maustaste auf eine Datei klicken und Eigenschaften überprüfen.
Leider hat C # keine Unterstützung für mehrere Streams, aber es gibt Open Source-Projekte, die Ihnen helfen können.

Siehe diesen Link für einen netten Wrapper zum Lesen und Schreiben mehrerer Streams in eine einzige Datei in C #.

    
Pablo Grisafi 07.09.2010 18:44
quelle
1

Alternative Datenströme funktionieren möglicherweise. Mit der :: stream-Syntax können Sie einen Datenstrom innerhalb Ihrer exe erstellen und Daten lesen / schreiben. Bearbeiten: Um einen alternativen Datenstrom zu erstellen / darauf zuzugreifen, verwenden Sie einen anderen Dateinamen. Etwas wie: application.exe: Einstellungen: $ data Dadurch wird auf einen Datenstrom namens "settings" in application.exe zugegriffen. Dazu müssen Sie beim Lesen oder Schreiben in die Datei die folgenden Einstellungen hinzufügen: settings: $ data. Diese Funktionalität wird von ntfs zur Verfügung gestellt, so dass es in c # funktioniert und sollte funktionieren, wenn die Anwendung läuft.

Weitere Informationen finden Sie unter Ссылка

    
Mike 07.09.2010 18:45
quelle
0

Wenn Sie die Daten mitnehmen möchten und nur eine Datei für die Exe und die Daten haben, .zip in eine selbstextrahierende EXE-Datei .zip.

    
Beth 07.09.2010 19:17
quelle
0

Sie können Daten zum Ende der ausführbaren Datei hinzufügen:

%Vor%     
Rahmat Anjirabi 13.05.2017 14:27
quelle

Tags und Links