Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

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 13:40


[gelöst] Henne Ei Problem - eigene EXE löschen
 
Moin !

Mein eigener Installer wird langsam rund doch ich bin gerade mal wieder auf ein Problem gestoßen ...
Und zwar habe ich im Anwendungsverzeichnis meinen Uninstaller (Uninstall.exe) liegen. Der löscht auch alles was ich ihm aufgetragen habe, aber er kann sich nicht selber löschen - der Zugriff wird in dem Fall verweigert.

Kann mir jemand einen Tip geben wie ich das nun hinbekomme das ich den Uninstaller auch mit löschen kann?

Namenloser 2. Jun 2009 13:42

Re: Henne Ei Problem - eigene EXE löschen
 
Das Thema gab es hier shcon öfter mal. Meistens kam dabei heraus, dass es am einfachsten ist, eine temporäre BAT-datei zu erstellen, die zuerst das Programm löscht und anschließend sich selbst - Batchdateien können das nämlich im Gegensatz zu kompilierten Programmen.

moelski 2. Jun 2009 13:45

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

Zitat:

eine temporäre BAT-datei zu erstellen
Und wie wäre dann der logische Ablauf? Ich starte meinen Unistaller und der Startet dann die BAT?
Oder direkt die BAT starten ?

p80286 2. Jun 2009 13:45

Re: Henne Ei Problem - eigene EXE löschen
 
hallo Moelski,

hatten wir das nicht schonmal?
sich selbst löschen kann die EXE nicht, das ginge nur über eine Batchdatei:
Delphi-Quellcode:
Uninstaler
del Uninstaler.exe
natürlich mit den richtigen Laufwerken/Verzeichnissen garniert.

Gruß
K-H

ich bin nicht schnell genug!!!

Meflin 2. Jun 2009 13:51

Re: Henne Ei Problem - eigene EXE löschen
 
Es gibt auch eine WinAPI-Funktion, mit der man Dateien zum Löschen markieren kann. Diese werden dann beim Herunterfahren (oder Neustarten) gelöscht.

Angel4585 2. Jun 2009 13:55

Re: Henne Ei Problem - eigene EXE löschen
 
versuch mal
1. Programm starten
2. Alte Datei umbenennen
3. Neue Datei erstellen
4. Programm beenden
5. Neues Programm starten
6. Umbenannte Datei löschen

moelski 2. Jun 2009 13:57

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

Zitat:

1. Programm starten
2. Alte Datei umbenennen
3. Neue Datei erstellen
4. Programm beenden
5. Neues Programm starten
6. Umbenannte Datei löschen
Wie soll das funktionieren? In dem Fall bekomme ich ja die "neue Datei" nicht gelöscht.

Angel4585 2. Jun 2009 14:41

Re: Henne Ei Problem - eigene EXE löschen
 
Achso, meinte damit, dass beim nächsten Programmstart die Datei gelöscht wird, hab den Anfangstext nicht richtig gelesen, dacht es geht um ne Live Update Funktion...

Und wenn du die Datei nicht nur umbenennst, sondern verschiebst?
Was muss denn sein damit man eine exe nicht löschen kann, exklusiver Zugriff auf die Datei?
Wer hat den Zugriff und kann man den exklusiven Zugriff aufheben?

wicht 2. Jun 2009 15:56

Re: Henne Ei Problem - eigene EXE löschen
 
Wenn der Uninstaller in C:\Programme\MyApp\uninstall.exe wohnt, könnte er sich ins Temp-Verzeichnis kopieren am Ende der Deinstallation, die Kopie ausführen und den Pfad des Original-Uninstallers mitgeben (ParamStr(1)). Die Kopie wartet, bis das Original beendet ist, löscht es dann (und das Verzeichnis MyApp) und legt für sich selbst dann mit MoveFileEx() das Löschen beim Neustart fest.
Ist auch nicht 1A, aber schöner als frickeleien mit Batch-Dateien, wie ich finde.

Aphton 2. Jun 2009 16:08

Re: Henne Ei Problem - eigene EXE löschen
 
Probiers mal mit ...
Delphi-Quellcode:
function DeleteSelf(): Boolean;
var
  F    : File of Byte;
  FP,
  Params: String;
const
  B : String =
    ':loop'#13#10+
    'del /F "%s"'#13#10+
    'if EXIST "%s" goto loop'#13#10+
    'del /F %s';
begin
  Result := False;
  FP     := ExtractFilePath( ParamStr(0) );
  {$i-}
  AssignFile( F, FP + '_.bat' );
  Rewrite( F );
  Params := Format( B, [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, 0 ) > 32;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:29 Uhr.
Seite 1 von 4  1 23     Letzte »    

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