Re: Henne Ei Problem - eigene EXE löschen
Moin !
Das geht schon ganz gut. Aber hat immer noch einen Haken ... Das Verzeichnis bleibt stehen. Ich habe mal versucht das hier noch an die BAT anzuhängen:
Delphi-Quellcode:
aber das bringts nicht.
'cd ..' + #13#10+
'RD "' + ParamStr(0) + '"' + #13#10 + In Summe schaut das nun so:
Delphi-Quellcode:
Den Ping habe ich reingenommen damit die CPU Last im Rahmen bleibt.
BatText := ':loop' + #13#10+
'ping localhost' + #13#10+ 'del /F "%s"' + #13#10+ 'if EXIST "%s" goto loop' + #13#10+ 'del /F "%s"' + #13#10+ 'cd ..' + #13#10+ 'RD "' + ExtractFilePath(Application.ExeName) + '"'; Aber das RD zeigt keine Wirkung. EDIT: 'RD "' + ParamStr(0) + '"' War natürlich ein Fehler. Geht aber dennoch nicht. |
Re: Henne Ei Problem - eigene EXE löschen
Warum ParamStr(0) ?
Bei folgender Anwendung - test.exe, die sich in C: befindet, liefert ParamStr(0) folgendes zurück: C:\test.exe - RD aber hingegen löscht nur Ordner.. Da ist was schiefgelaufen ;) MfG |
Re: Henne Ei Problem - eigene EXE löschen
Moin !
Drum hab ich ja auch sofort mein Post korrigiert auf ExtractFilePath(Application.ExeName) :wink: Aber es geht auch damit ned. |
Re: Henne Ei Problem - eigene EXE löschen
Zitat:
|
Re: Henne Ei Problem - eigene EXE löschen
Ah jetzt verstehe ich das ...
Wenn ich die Batch lösche von der Platte, dann kann der Command Prozessor auch nicht mehr die nächsten Befehle lesen und gibt den Fehler aus "Die Batchdatei kann nicht gefunden werden.". Also müsste man die Batch im Programm Root ablegen (c:\programme z.B.) und von dort laufen lassen. Und erst ganz zum Schluss die Batch löschen ... |
Re: Henne Ei Problem - eigene EXE löschen
Wo diese genau liegt sollte egal sein. Hauptsache du hast dort Schreibrechte und deren Löschung ist der letzte Schritt
|
Re: Henne Ei Problem - eigene EXE löschen
Zitat:
Vielleicht die Batch-Datei in den Temp-Ordner... dort wird sie dann irgendwann auch gelöscht, wenn sie durch einen Fehler als Leiche zurück bleibt. |
Re: Henne Ei Problem - eigene EXE löschen
Moin !
Hmm das geht aber dennoch nicht. Das Verzeichnis bleibt:
Delphi-Quellcode:
Ich habe das Verzeichnis für die BAT mal hart kodiert.
function DeleteSelf(): Boolean;
var F : File of Byte; FP, Params : String; BatText : String; begin BatText := ':loop' + #13#10+ 'ping localhost' + #13#10+ 'del /F "%s"' + #13#10+ 'if EXIST "%s" goto loop' + #13#10+ 'RD "' + ExtractFilePath(ParamStr(0)) + '"' + #13#10 + 'del /F "%s"' ; Result := False; FP := 'C:\Program Files\'; //ExtractFilePath( ParamStr(0) ); {$i-} AssignFile( F, FP + '_.bat' ); Rewrite( F ); Params := Format( BatText, [ParamStr(0), ParamStr(0), FP + '_.bat'] ); BlockWrite( F, Params[1], Length(Params) ); CloseFile( F ); {$i+} if not( IOResult = ERROR_SUCCESS ) then Exit; Result := ShellExecute( 0, 'open', pChar( FP + '_.bat' ), nil, nil, 1 ) > 32; end; Aber das Verzeichnis bleibt bestehen wenn ich es aus dem Programm raus starte. Starte ich die Batch alleine, geht es sauber. Merkwürdig ... |
Re: Henne Ei Problem - eigene EXE löschen
Also der andere hier vorgeschlagene Weg würde ich bevorzugen... Also den Uninstaller ins Temp-Verzeichnis kopieren und mit zu löschendem Pfad als Parameter aufrufen. Du hättest wesentlich mehr Kontrolle über den Löschvorgang.
Den Uninstaller im Temp-Verzeichnis dann mit DeleteSelf löschen... wenn das schief geht, liegen die "Reste" am richtigen Ort. |
Re: Henne Ei Problem - eigene EXE löschen
Hmm.. hat das mit dem MoveFileEx() denn irgendwelche Nachteile oder so? Wenn ich das mit der .bat sehe da bekomme ich fast - entschuldigung - das Grauen...
Und was mir noch einfällt, auf keinen Fall den Programm-Ordner einfach so löschen. Man sollte erst vergleichen, ob Dateien im Programmverzeichnis liegen, die der Benutzer nachträglich angelegt hat (nicht von dem Installer installiert). Da habe ich mir mit einer eigenen Deinstall-Routine selbst schon mal stark ins Knie geschossen... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:09 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz