Zum Inhalt springen

C-Programm soll sich selbst löschen


Expi

Empfohlene Beiträge

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also es geht auf jeden Fall.

Warum? Weil ich ein Beispiel kenne :)

Der Nullsoft Uninstaller löscht sich am Ende selbst - zwar nicht "direkt" selbst, aber durch folgenden Trick:

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

Quelle: http://www.nullsoft.com/free/nsis/makensis.htm

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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...