Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi [gelöst] Henne Ei Problem - eigene EXE löschen (https://www.delphipraxis.net/134972-%5Bgeloest%5D-henne-ei-problem-eigene-exe-loeschen.html)

moelski 2. Jun 2009 16:48

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:
             'cd ..'                  + #13#10+
             'RD "' + ParamStr(0) + '"' + #13#10 +
aber das bringts nicht.

In Summe schaut das nun so:
Delphi-Quellcode:
  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) + '"';
Den Ping habe ich reingenommen damit die CPU Last im Rahmen bleibt.
Aber das RD zeigt keine Wirkung.

EDIT:
'RD "' + ParamStr(0) + '"' War natürlich ein Fehler. Geht aber dennoch nicht.

Aphton 2. Jun 2009 16:54

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

moelski 2. Jun 2009 16:57

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.

mkinzler 2. Jun 2009 16:59

Re: Henne Ei Problem - eigene EXE löschen
 
Zitat:

Drum hab ich ja auch sofort mein Post korrigiert auf ExtractFilePath(Application.ExeName) Wink
Wobei man statt Application.Exename natürlich ParamStr(0) nehmen könnte

moelski 2. Jun 2009 17:01

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

mkinzler 2. Jun 2009 17:09

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

Satty67 2. Jun 2009 17:11

Re: Henne Ei Problem - eigene EXE löschen
 
Zitat:

Zitat von moelski
Also müsste man die Batch im Programm Root ablegen (c:\programme z.B.) und von dort laufen lassen.

Auch wenn zu erwarten ist, das ein User mit Admin-Rechten deinstalliert, muss das nicht sein.

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.

moelski 2. Jun 2009 17:17

Re: Henne Ei Problem - eigene EXE löschen
 
Moin !

Hmm das geht aber dennoch nicht. Das Verzeichnis bleibt:
Delphi-Quellcode:
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;
Ich habe das Verzeichnis für die BAT mal hart kodiert.
Aber das Verzeichnis bleibt bestehen wenn ich es aus dem Programm raus starte.
Starte ich die Batch alleine, geht es sauber.
Merkwürdig ...

Satty67 2. Jun 2009 17:37

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.

wicht 2. Jun 2009 18:05

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.
Seite 2 von 4     12 34      

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