BASIC

Author Topic: "Einweg"-Datei  (Read 3442 times)

Offline S.O.P.M.

  • Prof. Inline
  • *****
  • Posts: 529
    • View Profile
"Einweg"-Datei
« 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.
Notebook PC Samsung E372 Core i5 @ 2,6 GHz; 4 GB RAM; Win 7 Home Premium

Offline Kitty Hello

  • code monkey
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 10697
  • here on my island the sea says 'hello'
    • View Profile
    • http://www.glbasic.com
Re: "Einweg"-Datei
« Reply #1 on: 2008-Oct-23 »
is schwer. Eine .exe kann sich selbst net löschen. Du könntest allen in Temp kopieren und dort starten.

Offline S.O.P.M.

  • Prof. Inline
  • *****
  • Posts: 529
    • View Profile
Re: "Einweg"-Datei
« Reply #2 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.
Notebook PC Samsung E372 Core i5 @ 2,6 GHz; 4 GB RAM; Win 7 Home Premium

Offline S.O.P.M.

  • Prof. Inline
  • *****
  • Posts: 529
    • View Profile
Re: "Einweg"-Datei
« Reply #3 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... ;)
« Last Edit: 2008-Oct-23 by S.O.P.M. »
Notebook PC Samsung E372 Core i5 @ 2,6 GHz; 4 GB RAM; Win 7 Home Premium

Offline S.O.P.M.

  • Prof. Inline
  • *****
  • Posts: 529
    • View Profile
Re: "Einweg"-Datei
« Reply #4 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.
Notebook PC Samsung E372 Core i5 @ 2,6 GHz; 4 GB RAM; Win 7 Home Premium

Offline Kitty Hello

  • code monkey
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 10697
  • here on my island the sea says 'hello'
    • View Profile
    • http://www.glbasic.com
Re: "Einweg"-Datei
« Reply #5 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.

Offline Vampire

  • Mr. Polyvector
  • ***
  • Posts: 193
    • View Profile
Re: "Einweg"-Datei
« Reply #6 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^^

Offline Kitty Hello

  • code monkey
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 10697
  • here on my island the sea says 'hello'
    • View Profile
    • http://www.glbasic.com
Re: "Einweg"-Datei
« Reply #7 on: 2008-Oct-24 »
oder so. Aber cmd.exe oder command.exe?

Offline Vampire

  • Mr. Polyvector
  • ***
  • Posts: 193
    • View Profile
Re: "Einweg"-Datei
« Reply #8 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...