Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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

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.

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.

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.

kann man nicht eine andere exe starten und den befehl geben, die alte exe zu schliessen und zu löschen ?

also quasi

start end.exe

Exit in der alten

löschen alte ?

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?

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.

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.

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

Schon mal an eine Batch gedacht? Die zur Lauftzeit erstellt wird, die Exe löscht und sich dann selber ins Nirvana beamt? Michael Walz hat dazu vor einiger Zeit auf Codeproject einen sehr guten und vor allem kurzen & knackigen Artikel geschrieben: Writing a self destructing exe file.

Gruss,

Glen.

Was isn das für ne Sprache?

Ich versteh den Syntax net ganz.

Thx

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?

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.

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.

*fragt sich grade, ob überhaupt jemand seinen Post gelesen hat*

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

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

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

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.