Tipy a triky v Delphi, díl 199. - mazání aplikace po jejím ukončení

Smazat po sobě stopy, to je náplní dnešního dílu. Nebudeme ale ani mazat historii internetového prohlížeče nebo seznam naposledy otevřených dokumentů, ale smažeme přímo naší aplikaci, jakmile bude ukončena.

Je to sice poněkud kontroverzí příklad, ale jistě najdete situace, kdy bude použitelný. A nemusí to být zrovna nějaká nekalá činnost. Celý program je vlastně složen z několika jednoduchých funkcí, o kterých jsme si již během našeho seriálu nejednou říkali. Nejprve si tedy povíme, jaký bude postup.

Nebude to sice možná příliš "hi-tech" způsob, ale využijeme starý dobrý dávkový soubor. Postup bude tedy takový, že nejprve pomocí funkce GetTmpDir zjistíme cestu ke složce pro dočasné soubory. Poté si vygenerujeme unikátní název pro náš dočasný dávkový soubor. A pak už zbývá jen vygenerovat samotný soubor.

Ten vlastně obsahuje jednoduchý "cyklus", který testuje, zda existuje soubor s naší aplikací. Příslušné cesty i název aplikace získáme klasickým způsobem prostřednictvím funkce ParamStr. Pokud existuje, smaže jej, resp. pokusí se jej smazat. To dělá do té doby, dokud se to nepovede. Poté se cyklus ukončí a dávkový soubor nakonec smaže sám sebe. Dávkový soubor bude vypadat přibližně takto:

:Label1
del "C:\pom\Project1.exe"
if Exist "C:\pom\Project1.exe" goto Label1
rmdir "C:\pom\"
del C:\DOCUME~1\ADMN~1\LOCALS~1\Temp\uis136F.bat

Abychom tedy docílili toho, že bude aplikace automaticky smazána po svém ukončení, spustíme kód příslušné procedury například v události OnClose hlavního formuláře. Hlavní mazací procedura nejprve připraví zmiňovaný dávkový soubor, spustí jej a poté dojde k poněkud násilnému ukončení aplikace prostřednictvím procedury Halt. V případě, že to není pro vaši aplikaci ideální řešení, můžete zakončení provést i bezpečnějším způsobem, předem uzavřít všechny rozpracované soubory, uvolnit paměť a podobně. Ve většině případů však bude Halt stačit, i když jsem si vědom, že to není nejčistší řešení.

Dnešní ukázková aplikace tedy bude velmi jednoduchá, bude se skládat jen z prázdného formuláře a veškerý kód bude uvnitř procedury. Kompletní kód vypadá takto:

unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private declarations } public { Public declarations } end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure DelEXE;
function GetTmpDir: string; var pc: PChar; begin pc := StrAlloc(MAX_PATH + 1); GetTempPath(MAX_PATH, pc); Result := string(pc); StrDispose(pc); end;
function GetTmpFileName(ext: string): string; var pc: PChar; begin pc := StrAlloc(MAX_PATH + 1); GetTempFileName(PChar(GetTmpDir), `uis`, 0, pc); Result := string(pc); Result := ChangeFileExt(Result, ext); StrDispose(pc); end;
var batchfile: TStringList; batchname: string; begin batchname := GetTmpFileName(`.bat`); FileSetAttr(ParamStr(0), 0); batchfile := TStringList.Create; batchfile.add(`:Label1`); batchfile.add(`del "` + ParamStr(0) + `"`); batchfile.add(`if Exist "` + ParamStr(0) + `" goto Label1`); batchfile.add(`rmdir "` + ExtractFilePath(ParamStr(0)) + `"`); batchfile.add(`del ` + batchname); batchfile.SaveToFile(batchname); ChDir(GetTmpDir); ShowMessage(`Program bude nyni smazan`); WinExec(PChar(batchname), SW_HIDE); Halt; end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin DelExe; end;
end.

V reálné aplikaci bychom se samozřejmě neobtěžovali s upozorňováním uživatele na smazání aplikace, v naší ukázce je to pouze pro přehlednost. Dávkový soubor se rovněž pokusí smazat adresář, ve kterém se aplikace nachází. Tento řádek můžete pochopitelně odstranit nebo kompletní dávkový soubor upravit podle vlastních potřeb.

Diskuze (15) Další článek: Většinový podíl Grisoftu prodán zahraničním investorům

Témata článku: Software, Prohlížeče, Programování, Unikátní název, Trik, Jednoduchá cesta, TRI, Ukázková aplikace, Díl, DEL, Nekalá činnost, Maza, APL, Mazání, Ukončení, Kompletní kód


Určitě si přečtěte

DeOldify: Téměř zázračná technologie, která obarvuje 2. světovou válku, nebo vaše fotky z dětství

DeOldify: Téměř zázračná technologie, která obarvuje 2. světovou válku, nebo vaše fotky z dětství

** Neuronová síť DeOldify obarvuje fotky ** Můžete si ji vyzkoušet sami i bez superpočítače ** YouTube je plný obarvených ikonických videí

Jakub Čížek | 20

Epic chce rozbít monopol Play Storu a App Storu. Nastražil trik s hrou Fortnite a žaluje Google i Apple

Epic chce rozbít monopol Play Storu a App Storu. Nastražil trik s hrou Fortnite a žaluje Google i Apple

** Apple a Google odstranili z obchodů s aplikacemi hru Fortnite ** Její vývojáři nejprve přichystali parodické video ** V žalobách viní obě firmy z monopolního chování

Karel Kilián | 134

Co když chce Microsoft nahradit Windows Linuxem. Dokážete si to představit?

Co když chce Microsoft nahradit Windows Linuxem. Dokážete si to představit?

** Windows už dávno nejsou pilířem podnikání Microsoftu ** Mnohem více mu vydělává cloud ** Pojďme si trošku zaspekulovat, kam až by to mohlo zajít

Jakub Čížek | 90

Nejlepší aplikace na předpověď počasí: Kde nejlépe zjistit, co zrovna chcete vědět

Nejlepší aplikace na předpověď počasí: Kde nejlépe zjistit, co zrovna chcete vědět

Obecných aplikací na předpověď počasí je nespočet, jenže často skončí jen u základní informace o počasí a nenabídnou odpovědi na řadu praktických otázek. A tak jsme si položili právě několik takových otázek a hledali aplikace či meteoslužby, které nám nejlépe odpoví.

Karel Kilián | 4

Otestovali jsme 8 mobilů do 8 000 Kč: rozdíly ve výkonu jsou ohromné

Otestovali jsme 8 mobilů do 8 000 Kč: rozdíly ve výkonu jsou ohromné

** Mobil za 8 000 Kč uspokojí většinu uživatelů ** Klasické foťáky stačí, širokáče ale zklamaly ** Zásadní jsou rozdíly ve výkonu

Časopis Computer | 4


Aktuální číslo časopisu Computer

Megatest mobilů do 8 000 Kč

Test bezdrátových headsetů

Linux i pro začátečníky

Jak surfovat anonymně