Jak usunąć program po jego zamknięciu
Adam Boduch
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.
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.
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...)
%windir% - C:\Windows
"Zmienne" możemy zobaczyć poprzez polecenie set.
"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 ;-)
Albo jeszcze wygodniej - %TEMP%
A nie istnieje taka zmianna %windir% ??