Zum Inhalt springen

C-Programm soll sich selbst löschen


Empfohlene Beiträge

Geschrieben

Hy Leute,

eine Frage. Gibts ne Möglicgkeit damit sich ein C-Programm auf befehl selbst löscht ?

Habs mit atexit() und unlink() versucht, leider hat es nich geklappt.

Hat mir jemand ne Idee ?

Thx Expi

Geschrieben
Das geht nicht, denn solange ein Programm ausgeführt wird, ist seine EXE-Datei gesperrt.

Das bringt mich nich weiter. ;)

bissle konstruktiver bitte. muss doch ne möglichkeit geben. und wenns indirekt ist. hauptsache das file is nachher weg.

Geschrieben

Versuchs mal so: :eat:

Es geht nicht, darüber kann man noch seitenweise diskutieren, aber dadurch wirds auch nicht möglicher.

Was natürlich geht ist, dass das Programm irgendwo ein Flag setzt und dann beim nächsten Start des Betriebssystems gelöscht wird. Aber solange die Datei ausgeführt wird ist es unmöglich.

Geschrieben
Das bringt mich nich weiter. ;)

bissle konstruktiver bitte. muss doch ne möglichkeit geben. und wenns indirekt ist. hauptsache das file is nachher weg.

Ich finde es sehr konstruktiv Dir mitzuteilen, dass ein laufendes Programm seine EXE-Datei nicht löschen kann und Du deswegen keine weitere Zeit für eine ohnehin erfolglose Lösungssuche verschwenden brauchst.

Ein gerade ausgeführtes Programm kann sich mit normalen Mitteln unter Windows nicht selbst löschen. Soweit mir bekannt, ist es unter Linux und Unix auch nicht möglich. Du kannst lediglich ein anderes Programm "beauftragen", die Datei zu einem Zeitpunkt zu löschen, an dem Dein Programm nicht mehr aktiv ist. Bei Windows wäre der Systemstart solch ein Zeitpunkt. Das ist das Einzige, dass machbar ist. Wie genau Du das anstellen musst, hängt vom von Dir verwendeten Betriebssystem ab. Da Du nicht geschrieben hast, welches OS zum Einsatz kommt, kann ich Dir diesbezüglich nicht weiterhelfen.

Geschrieben

das könnte gehen, wenn du dann in der end.exe zunächst einen entsprechenden timeout einbaust, wodurch du sichergehst, dass die alte exe gelöscht wird.

allerdings bleibt dann ja immmernoch die end.exe... und ich glaub nicht, dass expi sich das dann so vorgestellt ghat, dass dann ne neue exe da ist.

wie ist das denn mit linux?

wenn ich da nen kindprozess erzeuge (fork() oder so) und dann das ganze durch timeouts so abpasse, dass zuerst der elternprozess beendet wird, dann der kindprozess vom init-prozess übernommen wird. dann löscht der kindprozess die executables des programms und beendet sich.

in diesem fall dürfte doch nichts zurückbleiben, oder?

Geschrieben

das wäre eine möglichkeit oder du läst von deinem Programm ein batchfile erstellen. Diese Legst du im temp verzeichnis ab. Des weiteren Erzeugst du einen Reg eintrag in .....(weis den genauen ort nicht mehr)/RunOnce.

Zu guter läst lässt du durch dein Programm den Rechner neustarten und schon wird nach dem neustart das Programm gelöscht. Die batch liegt dann zwar noch im temp wird aber nicht mehr automatisch ausgeführt. Der Vorteil du hast nur ne ca 1KB grosse batchfile die vermutlich sowieso irgendwann aus dem Tempverzeichnis fliegt und nicht eine weitere exe.

Geschrieben
wie ist das denn mit linux?

wenn ich da nen kindprozess erzeuge (fork() oder so) und dann das ganze durch timeouts so abpasse, dass zuerst der elternprozess beendet wird, dann der kindprozess vom init-prozess übernommen wird. dann löscht der kindprozess die executables des programms und beendet sich.

Ich glaube nicht, dass der mit fork erzeugte Prozess die exe löschen darf, denn immerhin ist sie ja auch sein process image. Dazu müsste erst mit einem der exec Befehle ein neues process image geladen werden, aber dann hätten wir wieder den Fall mit den zwei ausführbaren Dateien, von denen immer eine übrig bleibt.

Geschrieben

Freut mich einen Stein ins Rollen gebracht zu haben.

Scheinbar bin ich nicht der einzige den so ein Vorhaben interssiert. ;)

Die BatchFile Variante wäre vlt interessant, da ein batchfile sich selbst löschen kann, und somit auch von der .batch nix übrig bleiben würde.

Nur wie erzeuge ich über C den Registry Eintrag ? Welche Funktion ist dafür zuständig ? Kann mir da einer ein Code Beispiel zeigen ?

Thx

Geschrieben
Was haste eigentlich vor? Warum willste das sich die Datei nach dem Ausführen automatisch löscht? Willste in dein Programm n Menüpunkt uninstall rein machen? oder wie?

ja so in der art.

Geschrieben

The first Delete instruction works (deleting the uninstaller), because the uninstaller is transparently copied to the system temporary directory for the uninstall.

Und was passiert mit der Kopie im temp Verzeichnis?

Da scheinbar wirklich großes Interesse besteht: Mit "runonce.exe" kann man IMO die Abarbeitung der RunOnce Registry Einträg auch sofort in Gang setzen.

Und wer nicht indirekt vorgehen will, der kann auch den Lock auf sein eigenes EXE File entfernen. Wie es geht ist unter http://www.ezds.com/html/sde.html gut beschrieben. Allerdings würde ich das nicht unbedingt als "offizielle" Vorgehensweise betrachten und es nicht unbedingt in produktiv-Code einsetzen.

Ich frage mich ohnehin, wozu das Löschen des eigenen Programms in Zeiten des Windows Installers überhaupt noch notwendig sein soll.

Geschrieben

Man könnte es machen.

Dazu muss man nur den Befehl zum löschen geben, dann versucht windows ( bei mir ) ca. 5 sekunden die Datei zu löschen und gibt dann nen Error aus!

Wenn man allerdings inherhalb dieser 5 sekunden die anwendung mit dem befehl beendet, ist der lösch befehl unter windows doch noch Aktiv!

Also is die danach weg.

(Siehe uninstall Dateien von Programmen, die löschen sich danach auch selbst)

MfG Stephan

Geschrieben

So langsam frag ich mich wirklich, wozu man das braucht. Ich meine, kompetente Lösungsansätze gibt's bestimmt, genauso gibt es aber auch schon Lösungen dafür. Mich hat das Problem früher mal beschäftigt, als ich überlegte, wie ich einen "temporären" Trojaner schreiben kann :D

Geschrieben

Danke für die zahlreichen Antworten.

Ich habe mich für die Batch Variante nach SelfDestruct() entschieden.

Obwohl die _asm Variante um die EXE Lock aufzuheben auch net schlecht ist.

Danke nochmals.

Expi

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...