Datei löschen, die gerade noch läuft
-
Hallo,
weiß jemand eine Methode, wie man sein eigenes Programm vor dem Beenden, oder kurz danach selbst löschen kann? Ich kenne 3 Möglichkeiten:
-
DeleteFile... geht aber nicht, da das Programm ja noch läuft und der Zugriff verweigert wird.
-
CreateFile... mit Fileflag FLAG_DELETE_ON_CLOSE geht ebenfalls nicht aus dem gleichen Grund.
-
MoveFile.. mit Option MOVEFILE_DELAY_UNTIL_REBOOT möchte ich nicht, da es sofort passieren soll.
[ Dieser Beitrag wurde am 08.04.2003 um 15:31 Uhr von Uli editiert. ]
-
-
BOOL SelfDelete() { TCHAR szModule [MAX_PATH], szComspec[MAX_PATH], szParams [MAX_PATH]; // get file path names if((GetModuleFileName(0,szModule,MAX_PATH)!=0) && (GetShortPathName(szModule,szModule,MAX_PATH)!=0) && (GetEnvironmentVariable("COMSPEC",szComspec,MAX_PATH)!=0)) { // set command shell parameters lstrcpy(szParams,"/c del "); // run a single command to... lstrcat(szParams, szModule); // del(ete) module file and... lstrcat(szParams, " > nul"); // output results to nowhere // execute command shell (<=32 is error condition) if((INT)ShellExecute(0,0,szComspec,szParams,0,SW_HIDE)>32) { // if successful notify Windows Explorer SHChangeNotify(SHCNE_DELETE,SHCNF_PATH,szModule,0); return TRUE; } } return FALSE; }
-
Vielleicht hilft dir Wie kann sich ein Programm selbst löschen?
-
also ich hab mal das Beispiel ausprobiert, wo das Programm kopiert wird und die Kopie nach Beendigung des Originals dieses löscht. Nur bleibt dann die Kopie stehen, weil die Funktion CreateFile mit FLAG_DELETE_ON_CLOSE, auf die Kopie angewendet unter Win 2000 nicht funktioniert. Also bleibt eigentlich nur die Batchlösung.