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.
 

Kategoria: Delphi » FAQ

6 komentarzy

Brak avatara
Napisany 2009-12-12 19:25 przez mgyver

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.

Avatar: Patryk27
Napisany 2009-11-28 14:40 przez Patryk27

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

Brak avatara
Napisany 2008-12-21 18:47 przez Defozo

%windir% - C:\Windows

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

Brak avatara
Napisany 2008-06-04 17:54 przez Mammoth

"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 ;-)

Brak avatara
Napisany 2008-01-27 04:37 przez Patyk

Albo jeszcze wygodniej - %TEMP%

Avatar: MikiKam
Napisany 2007-02-20 20:11 przez MikiKam

A nie istnieje taka zmianna %windir% ??

4programmers.net