Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   SelfDelete Funktion für Deinstallationen oder ähnliches (https://www.delphipraxis.net/129205-selfdelete-funktion-fuer-deinstallationen-oder-aehnliches.html)

Yakumo500 14. Feb 2009 13:46


SelfDelete Funktion für Deinstallationen oder ähnliches
 
Hi,

Ich habe mir eine Deinstallation geproggt und da bin ich auf das Problem gestoßen, dass die Deinstallation exe auch gelöscht werden muss.

Deshalb habe ich eine kleine Funktion geschrieben, die mithilfe einer bat Datei die Exe nach dem Beenden löscht.

Hier der Source:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ShellApi;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure SelfDelete();
var TempDir: string;
    BatFile: TStringList;
begin
  TempDir := GetEnvironmentVariable('Temp');

  BatFile := TStringList.Create;
  BatFile.Add('ping -n 0127.0.0.1 > nul');
  BatFile.Add(':loop');
  BatFile.Add('del "' + Application.ExeName + '" > nul');
  BatFile.Add('if exist "' + Application.ExeName + '" goto loop');
  BatFile.Add('del "' + TempDir + 'selfdelete.bat' + '"');

  BatFile.SaveToFile(TempDir + 'selfdelete.bat');
  BatFile.Free;

  ShellExecute(Form1.Handle, nil, PChar(TempDir + 'selfdelete.bat'), nil, nil, SW_HIDE);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  SelfDelete();
end;

end.
Ich hoffe es hilft euch!

Luckie 14. Feb 2009 14:07

Re: SelfDelete Funktion für Deinstallationen oder ähnliches
 
Warum pingst du den localhost an?

Bernhard Geyer 14. Feb 2009 14:22

Re: SelfDelete Funktion für Deinstallationen oder ähnliches
 
Und wieso lässt du das nicht Windows mit MoveFileEx für dich erledigen?

Zitat:

If dwFlags specifies MOVEFILE_DELAY_UNTIL_REBOOT and lpNewFileName is NULL, MoveFileEx registers the lpExistingFileName file to be deleted when the system restarts. If lpExistingFileName refers to a directory, the system removes the directory at restart only if the directory is empty.

Meflin 14. Feb 2009 14:30

Re: SelfDelete Funktion für Deinstallationen oder ähnliches
 
Zitat:

Zitat von Bernhard Geyer
Und wieso lässt du das nicht Windows mit MoveFileEx für dich erledigen?

Weil bat ohne Reboot auskommt?

Bernhard Geyer 14. Feb 2009 14:33

Re: SelfDelete Funktion für Deinstallationen oder ähnliches
 
Zitat:

Zitat von Meflin
Zitat:

Zitat von Bernhard Geyer
Und wieso lässt du das nicht Windows mit MoveFileEx für dich erledigen?

Weil bat ohne Reboot auskommt?

Ob der Anwender das Merkt. Und diese Lösung hat eine Restgefahr das der Virenscanner zuschlägt.

Meflin 14. Feb 2009 14:35

Re: SelfDelete Funktion für Deinstallationen oder ähnliches
 
Zitat:

Zitat von Bernhard Geyer
Ob der Anwender das Merkt.

In Zeiten von Ruhezustand und Desktop-Deckel-Schließern (Energiesparmodus) bleibt der Kram dann halt doch mal (mehrere) hundert Tage auf der Festplatte - ist ja auch nicht ganz der Sinn einer Deinstallation...

Bernhard Geyer 14. Feb 2009 14:48

Re: SelfDelete Funktion für Deinstallationen oder ähnliches
 
Zitat:

Zitat von Meflin
In Zeiten von Ruhezustand und Desktop-Deckel-Schließern (Energiesparmodus) bleibt der Kram dann halt doch mal (mehrere) hundert Tage auf der Festplatte ...

Wozu haben wir den den monatlichen MS-Patch-Day :mrgreen:. Ich glaube nicht das es irgendeine gepatchen Windows-PC gibt der länger als 1/4 Jahr seit seinem letzten Reboot läuft.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:46 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