GLBasic forum

Other languages => GLBasic - de => Topic started by: S.O.P.M. on 2008-Oct-23

Title: "Einweg"-Datei
Post by: S.O.P.M. on 2008-Oct-23
Problemstellung: Eine selbstausführbare Datei, die ein Bild oder Video enthält, soll dieses einmal anzeigen und sich danach selbst vernichten. Dies sollte noch zu realisieren sein. Nun gibt es jedoch einen Haken an der Sache. Der User könnte die Datei jedesmal vor der Ausführung kopieren. Es bliebe immer wieder eine Datei übrig - die Kopie bzw. die Kopie von der Kopie! Die große Frage ist, wie könnte das Kopieren der Datei verhindert werden?

Was leider keine Lösung darstellt ist, wenn die Datei auch nach Kopien ihrer selbst sucht und diese mit löscht. Der User könnte eine Kopie einfach auf einem anderen Datenträger speichern oder sie in ein Archiv packen, was eine Erkennung fast unmöglich macht.

Oder hat jemand eine andere Idee, wie es zu realisieren wäre, eine Datei zu erstellen, die sich unter allen Umständen nur genau einmal verwenden lässt?

Es geht darum, Daten für eine einmalige Betrachtung zur Verfügung zu stellen, die aber auf keinem Fall weiter verwendbar sein dürfen.
Title: Re: "Einweg"-Datei
Post by: Kitty Hello on 2008-Oct-23
is schwer. Eine .exe kann sich selbst net löschen. Du könntest allen in Temp kopieren und dort starten.
Title: Re: "Einweg"-Datei
Post by: S.O.P.M. on 2008-Oct-23
Mit der Selbstlöschung hielt ich für machbar, da das damals mit einer EXE des QBasic Compilers noch wunderbar ging. Vermutlich war das mit den DOS-Dateien anders - die wurden wohl einfach in den Speicher geladen und anschließend waren sie bei Ausführung nicht mehr offen - so meine Vermutung.

Ich weiß nicht sicher, ob Folgendes funktionieren würde: Eine gerade ausgeführte Datei ist ja geöffnet, weshalb sie sich nicht löschen lässt, richtig? So, nun könnte die Anweisung zu löschen doch direkt an Windows gesendet werden - also als Anweisung wie in der Eingabeaufforderung. Das Gute ist, Windows scheint einen Lösch-Befehl kurz in einem "Puffer" zu halten, wenn er nicht sofort ausgeführt werden kann. Das habe ich schon gemerkt, wenn ich eine noch geöffnete Datei löschen möchte - die Fehlermeldung kommt nicht sofort - es vergehen noch ein paar Sekunden. Wenn ich die Datei schnell schließe, löscht er sie noch, obwohl der Befehl noch bei der geöffneten Datei abgegeben wurde. Deshalb denke ich, könnte das dann auch in diesem Fall klappen. Die Anweisung wird an Windows gesendet und das Programm geschlossen, die Datei kann nun gelöscht werden.
Title: Re: "Einweg"-Datei
Post by: S.O.P.M. on 2008-Oct-23
Natürlich, das ist doch ein guter Lösungsansatz - vielleicht ohne Stapeldateien, aber vom Prinzip her praktisch gleich: Die zu löschende EXE generiert unmittelbar vor dem Beenden eine weitere EXE, welche dann für die Löschung zuständig ist. Diese Datei würde sich dann um die Löschung kümmern und das kann dann auch problemlos mit einer kleinen, zeitlichen Verzögerung passieren. Dass die dann übrig bleibt, wäre nicht so schlimm. Die wäre dann im gleichen Verzeichnis, nicht mehr brauchbar und der User würde sie auch gleich bemerken und könnte sie selbst entfernen.

Naja... sicher wäre das trotzdem nicht, denn bei der Generierung kann ja auch etwas schief gehen und das Kopierproblem wäre damit auch noch nicht gelöst. Ein Mist... ;)
Title: Re: "Einweg"-Datei
Post by: S.O.P.M. on 2008-Oct-23
Quote
pass dabei auf:  viele Virenscanner sowie auch etwaige aktivierten Benutzerrichtlinien (policies) mögen es ganz und gar nicht, wenn laufende Programme neue Programme kreieren...
Das ist kein Problem, denn aktive Virenscanner werden zunächst deaktiviert und die Benutzerrichtlinien entsprechend modifiziert :D
Nee, Scherz! Dass das Ganze ziemlich experimentell bleiben wird und auch höchstens begrenzt praxistauglich sein kann, ist mir schon klar. Werde das alles in PB machen, mal gucken...
Du hast auf jedem Fall die richtige Idee gehabt, Ocean. Danke.
Title: Re: "Einweg"-Datei
Post by: Kitty Hello on 2008-Oct-24
Ich hatte das Probem in der Arbeit, weil ein Uninstaller sich selbst löschen sollte. MoveFileEx war die Lösung. Es geht nicht anders.
Ich kopiere also die Uninstall.exe in /temp und lösch sie beim nächsten Neustart mit MoveFileEx.
Title: Re: "Einweg"-Datei
Post by: Vampire on 2008-Oct-24
weiss jetzt nicht ob ich alles richtig verstanden habe, aber mein vorschlag lautet:
die .exe erstellt eine .batch die die exe dann löscht und anschliesend sich selbst.
batch dateien können das...

mit PureBasic habe ich sowas mal gemacht, is easy^^
Title: Re: "Einweg"-Datei
Post by: Kitty Hello on 2008-Oct-24
oder so. Aber cmd.exe oder command.exe?
Title: Re: "Einweg"-Datei
Post by: Vampire on 2008-Oct-24
meinst du jetzt mich?
wenn ja, dann *Bahnhof*?

wo ist denn da der unterschied?
ich glaub unter win98 musste man *command.exe* auch wirklich ausschreiben.
die wirkung war aber die selbe...