Programowanie w języku Delphi » FAQ

Jak usunąć program po jego zamknięciu

  • 2009-11-07 17:22
  • 6 komentarzy
  • 1177 odsłon
  • Oceń ten tekst jako pierwszy
Często spotykany problem - np. w aplikacjach - instalatorach. Mianowicie jak program ma usunąc samego siebie? W tym celu stworzony zostanie program który usunie pliki naszego programu. Program zostanie stworzony w katalogu Windows\Temp, gdyż ten katalogu jest często oprózniany, a nasz program zajmował będzie tylko 18 bajtów! Tak, to będzie program dosowy z rozszerzeniem *.bat, który najpierw usunie naszą aplikacją, a potem samego siebie. A więc oto kod:

uses SysUtils;
 
var
  TF: TextFile;
begin
  PostMessage(Handle, wm_Quit, 0, 0); // zamkniecie naszej aplikacji
 
  AssignFile(TF, '%windir%\Temp\kill.bat'); // zapisz plik
  Rewrite(TF);
  Writeln(TF, ':kill');
  Writeln(TF, 'cd ' + ParamStr(0));
  Writeln(TF, 'del ' + ExtractFileName(ParamStr(0)));
  Writeln(TF, 'if exist ' + ExtractFileName(ParamStr(0))+ ' goto kill');
  Writeln(TF, 'del %0');
  CloseFile(TF);
 
  // uruchom program
  WinExec('%windir%\Temp\kill.bat', sw_Hide);
end.

6 komentarzy

mgyver 2009-12-12 19:25

Gówniana metoda. Zostawia syf na dysku.

Polecam metody: Process Injection lub Dll Injection. Są śmiesznie proste w napisaniu (wygoglaniu gotowca), a potem użyciu. AV się nie burzą o dziwo.
Wtedy twój soft, usunie inna aplikacja, która zostanie zaszczepiona kodem lub dll-ka, które to usuwają twój soft. Używam tego do aktualizacji swojego softa bez zapisywania żadnych dodatkowych plików na dysku.

Patryk27 2009-11-28 14:40

<quote>Writeln(TF, 'if exist ' + ExtractFileName(ParamStr(0))+ ' goto kill');</quote>
Czy to oznacza, że plik będzie "usuwany" póki nie zniknie ?
(Ciekawie by było, gdyby użytkownik nie miał praw do usuwania, lub zablokował usuwanie tego pliku...)

Defozo 2008-12-21 18:47

%windir% - C:\Windows

"Zmienne" możemy zobaczyć poprzez polecenie set.

Mammoth 2008-06-04 17:54

"Program zostanie stworzony w katalogu Windows\Temp, gdyż ten katalogu jest często opróżniany"

Plik bat może usunąć samego siebie poprzez polecenie del:

del "C:\Windows\Temp\kill.bat"

i będzie ok ;-)

Patyk 2008-01-27 04:37

Albo jeszcze wygodniej - %TEMP%

MikiKam 2007-02-20 20:11

A nie istnieje taka zmianna %windir% ??