Entwickler-Ecke

Windows API - Laufende EXE löschen


LonghornUser - Fr 06.08.04 18:05
Titel: Laufende EXE löschen
Hallo.

Ich habe bereits im forum gesucht, aber leider nix gefunden.
Wie macht man das möglichst ohne externe datei ?

hofe auf schnelle antworten.

ciao


mstuebner - Fr 06.08.04 18:15
Titel: Re: Laufende EXE löschen
LonghornUser hat folgendes geschrieben:
Hallo.

Ich habe bereits im forum gesucht, aber leider nix gefunden.
Wie macht man das möglichst ohne externe datei ?

hofe auf schnelle antworten.

Hoffnung mit zwei F ist aber mehr wert. Wenn es ohne externe Datei gehen soll, dann musst Du auf einen Registry-Eintrag zurückgreifen (wenngleich ich mich momentan nicht an den genauen Eintrag erinnere). Es gibt dort Einträge z.B. um Dateien beim nächsten Neustart auszutauschen/kopieren/löschen.


raziel - Fr 06.08.04 18:17

Hm, ich würde sagen -> Alle laufenden Instanzen der Exe beenden und dann löschen. Da findest bestimmt auch was im Forum zu: Suche in: Delphi-Forum, Delphi-Library PROZESS BEENDEN

raziel


mstuebner - Fr 06.08.04 18:19

raziel hat folgendes geschrieben:
Hm, ich würde sagen -> Alle laufenden Instanzen der Exe beenden und dann löschen. Da findest bestimmt auch was im Forum zu: Suche in: Delphi-Forum, Delphi-Library PROZESS BEENDEN

Wie soll ein Programm sich selbst beenden und ANSCHLIESSEND sich selbst löschen? Nur mal als Frage?


raziel - Fr 06.08.04 18:30

Die Frage war lediglich, wie man eine laufende Exe löscht. Davon, dass die laufende Exe sich selbst löschen soll, war nicht explizit die Rede.

raziel


LonghornUser - Fr 06.08.04 18:32

@ mstuebner: Das stimmt.

Vielleicht sollte iches doch mit ner externen andwendung machen, d.h. mit ner .BAT-Datei. können die sich nicht selbst löschen ? Wenn ja, was muss da genau reingeschrieben werden ? Bin nicht so fit in BAT-Programmierung :(


mstuebner - Fr 06.08.04 18:32

raziel hat folgendes geschrieben:
Die Frage war lediglich, wie man eine laufende Exe löscht. Davon, dass die laufende Exe sich selbst löschen soll, war nicht explizit die Rede.

Ich erlaube mir aus dem originalen Posting zu zitieren...
Zitat:
Wie macht man das möglichst ohne externe datei?


mstuebner - Fr 06.08.04 18:35

LonghornUser hat folgendes geschrieben:
@ mstuebner: Das stimmt.

Vielleicht sollte iches doch mit ner externen andwendung machen, d.h. mit ner .BAT-Datei. können die sich nicht selbst löschen ? Wenn ja, was muss da genau reingeschrieben werden ? Bin nicht so fit in BAT-Programmierung :(

Die BAT (oder CMD) Zeiten sind auch bei mir eine ganze Weile vorbei, jedoch bin ich der Meinung, dass sich BATCHdateien sehr wohl selbst löschen können, da sie ja nicht ausgeführt sondern in den Interpreter geladen werden.


raziel - Fr 06.08.04 18:41

mstuebner hat folgendes geschrieben:
Ich erlaube mir aus dem originalen Posting zu zitieren...
Zitat:
Wie macht man das möglichst ohne externe datei?

Was nicht zwangsläufig bedeutet, dass seine ausführende Exe sich selbst löschen soll.

Das mit den .BAT Dateien ginge im Zusammenhang mit einem Autostart-Eintrag in "HKEY_CU\Software\Microsoft\Windows\CurrentVersion\RunOnce" (iirc) und folgender .BAT Datei:


deleteit.bat
1:
2:
del diezulöschende.exe
del deleteit.bat

Ganz so sauber is das zwar nicht und es gibt auch ne Fehlermeldung (deleteit.bat kann nicht gefunden werden), aber es funktioniert...

raziel


LonghornUser - Fr 06.08.04 18:59

Ja, dass sich eine laufende Datei (EXE) selbst löscht :)

@raziel: Warum muss das in den Autostart ? Kann man nicht in die BAT-Datei einen befehl â la wait(5); (wobei 5 die zeit in milisekunden ist) ? Also so, dass die EXE die BAT aufruft und sich anschließend selbst beendet. Nachdem der Timer der BAT abgelaufen ist, löscht die datei die EXE sowie die BAT ? Geht das so ?


MSCH - Fr 06.08.04 19:08

musst du schauen hier:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/movefileex.asp

also zumindest unter XP/NT/2000

 MoveFileEx('c:\windows\command.com','nul',MOVEFILE_DELAY_UNTIL_REBOOT)


grez
msch


raziel - Fr 06.08.04 19:26

LonghornUser hat folgendes geschrieben:
@raziel: Warum muss das in den Autostart ? Kann man nicht in die BAT-Datei einen befehl â la wait(5); (wobei 5 die zeit in milisekunden ist) ? Also so, dass die EXE die BAT aufruft und sich anschließend selbst beendet. Nachdem der Timer der BAT abgelaufen ist, löscht die datei die EXE sowie die BAT ? Geht das so ?

Nein, das läuft so: Deine Exe macht das, was sie soll. Dann erstellt sie diese Bat Datei (mit den exakten Pfaden) und trägt eben diese Bat Datei in den RunOnce Schlüssel in die Registry ein. Dann wird beim nächsten Booten diese Bat Datei gestartet, ein kleines Dos-Fenster blitzt auf und verschwindet wieder und dann wird der Eintrag (afaik) von Windows gelöscht. Das dürfte auch unter allen Windows-Versionen funktionieren, Probleme könnts geben, wenn der User nicht das Recht hat, die Exe zu löschen... Aber das dürfts eh, bei jeder Lösung unter NT/XP geben...

raziel


LonghornUser - Fr 06.08.04 21:10

hallo nochmals,

ich habe das jetzt so gemacht, dass ich unter runonce die bat datei reingeschrieben habe. die bat datei sieht so aus:


Quelltext
1:
2:
3:
4:
5:
6:
7:
:Label1
del "C:\Programme\progg\Uninstall.exe"
if Exist "C:\Programme\progg\Uninstall.exe" goto Label1
del "C:\Programme\progg\images\*.*"
rmdir "C:\Programme\progg\images"
rmdir "C:\Programme\proff\"
del C:\RemoveEHK.bat


doch leider fragt er jetzt immer, ob C:\Programme\progg\images\*.* gelöscht werden soll. und zwar mit J/N abfrage sodass der user erst j drücken muss :( Kann ich das autom. bestätigen lassen ?


mstuebner - Fr 06.08.04 22:16

LonghornUser hat folgendes geschrieben:
doch leider fragt er jetzt immer, ob C:\Programme\progg\images\*.* gelöscht werden soll. und zwar mit J/N abfrage sodass der user erst j drücken muss :( Kann ich das autom. bestätigen lassen ?

Wäre es sehr innovativ auf der Shell mal del /? einzugeben?


raziel - Sa 07.08.04 09:41

Um gleich der nächsten Frage ("Warum wird ds Verzeichnis C:\Programme\Progg nicht gelöscht??") vorzubeugen:
Änder in Zeile 6 die beiden "ff" doch einfach in "gg" ;-)

raziel


LonghornUser - Sa 07.08.04 12:28

jaaaaa :lol: das ff war ein schreibfehler. SORRY Aber ich habs jetzt hinbekommen. Geht alles super, bis auf das man neustarten muss, aber das geht ja nicht anders, wenn man will, dass es unter allen windows geht (98/ME/NT/2K/XP). Naja. Danke aber an alle.


Anonymous - Sa 07.08.04 12:39

Wenn ich mich nicht irre kannst du auch einfach die BAT-Datei unsichtbar per ShellExecute starten und direkt danach das Programm beenden.


LonghornUser - Sa 07.08.04 12:49

ja, das ginge, aber dann würde die bat ja bevor die anwendung beendet ist versuchen, sie zu löschen, was ja nicht geht. es sei denn die BAT kann meine anwendung selber beenden (killtask oder so) geht sowas ?


Delete - Sa 07.08.04 15:36

Dann bau in die Batch-Datei eine Schleife ein, die so lange versucht die Exe zu löschen, bis es geht. WEie das geht solltest du hie rim Forum finden.


Popov - Sa 07.08.04 16:49

Hej Leute, ist einer von euch Spezis auf die Idee gekommen in der FAQ hachzugucken? Da liegt schon seit Jahren ein Beitrag mit einem Beispiel wie man das eigene Programm mit Hilfe eine BAT Datei löschen: http://www.delphi-forum.de/viewtopic.php?p=65807#65807


scrooge - Sa 07.08.04 22:09

Schau mal unter unter diesem LInk (da steht, wie sich eine Exe selbst aus dem eigenen Prog ohne Bat ohder zur Hilfenahme einer zweiten Instanz der Exe löschen kann). Hba noch nicht asuprobiert und den letzten Teil spez. für windowsXOP ist mir nicht so recht klar. Probiers mal:
http://www.catch22.org.uk/tuts/selfdel.asp


LonghornUser - Sa 07.08.04 23:21

OK: ich habe es jetzt mit der lösung aus den FAQs gemacht :D Alles funzt nun. Danke !!!