# DeleteFile() - sich selbst löschen..



## rook (19. März 2006)

moin,
ich möchte, das sich eine exe datei selbst löschen kann, hab auf MSDN gelesen das dies nur (noch?) unter Win95/98/me geht... ich hab aber WinXP 

```
The DeleteFile function marks a file for deletion on close. Therefore, the file
deletion does not occur until the last handle to the file is closed.
```
wenn ich das richtig verstanden habe... .-> hab ich mir gedacht, wenn die datei zum löschen MARKIERT wird... dann kann ich ja per CreateRemoteThread() in irgendein process ein thread starten... der dann mein file löscht....
geht aber leider auch nicht


----------



## Messiahs_128 (19. März 2006)

So was geht imo net. Eine datei kann sich nicht selbst löschen


----------



## codeman (19. März 2006)

Hallo,

Eine Exe kann sich mit einem Trick selbst löschen!
http://www.activevb.de/tipps/vb6tipps/tipp0476.html
... der Tipp ist zwar für VB, aber das Prinzip müsste sich in C auch verwirklichen lassen.

codeman


----------



## Endurion (19. März 2006)

Eine ausführende Datei kann nicht gelöscht werden.

Es gibt da aber ein paar Tricks, einen davon habe ich in meinem Uninstaller verwendet:

1) ein zweites Programm mit CreateProcess aufmachen (evtl. aus den Ressourcen schreiben), es gibt da ein Flag, dass die Datei beim Beenden löscht. Sprich, du schreibst das Löschprogramm raus und startest es mit dem Flag. Danach beendest du dein Programm. Darauf wartet dein Löschprogramm, löscht dein Programm und beendet sich selbst, wodurch es selbst gelöscht wird.

2) Du legst eine Batchdatei an. Diese enthält einen Befehl, der dein Programm löscht (mit KOMPLETTEM Pfad). Als letzte Zeile in der Batchdatei löschst du die Batchdatei selbst. Diese letzte Zeile NICHT mit Return abschliessen, dann gibt es da auch keine Fehlermeldung.

3) Da gabs noch was mit den Windows-Setup-Routinen, da würde das Löschen dann aber erst beim nächsten Bootvorgang erfolgen.

Ich benutze Methode 2. In beiden Fällen 1 und 2 sollte das endgültige Löschprogramm dann sinnigerweise auch in einem anderen Ordner liegen (wenn der Ordner deines Programmes gelöscht werden soll). 

Wichtig: Benutze immer ABSOLUTE Pfade. Alles andere kann böse ins Auge gehen und etwas anderes löschen, das zufällig gleich heisst.


----------



## SLide86 (1. November 2006)

Hi!
Ich weiß es ist schon eine Weile her, aber habe noch eine Frage zu der Sache mit dem Batch-File. Wenn ich das Batchfile mit einer exe aus einem best. Ordner heraus erstelle(Beispiel: C.\test) und das batch in C:\ speichere. Dann will ich mit der Batch die exe in C.\test löschen, das klappt auch super, auch das löschen des batch klappt super. Jedoch will ich dann auch den Ordner c:\test löschen. Da gibt mir das batch aber eine Fehlermeldung aus, dass ein anderer Prozess den Ordner noch benutzt.. Ich denke mal weil das batch aus diesem Ordner heraus erstellt wurde oder? Wenn ich das batch ein zweites mal ausführe, dann wird der Ordner gelöscht.
Mache das mit RD /Q/S C:\test
Hat da jemand ne Lösung für mich?

Gruß,
Sebastian


----------



## Endurion (2. November 2006)

Dein aktuelles Verzeichnis ist vermutlich noch der Ordner. Da musst du (am besten in der Batch-Datei) mit cd rauswechseln. Und die exe muss natürlich beendet sein (sprich, den Aufruf der Batch-Datei als allerletzten Befehl ausführen).


----------

