Este tema ya se trato en el foro otras veces. Pero de todas formas:
Usando un bat:
Código Delphi
[-]
uses ShellApi;
procedure Borrate;
var
Path: String;
Buffer: array[0..MAX_PATH] of Char;
begin
if GetShortPathName(PChar(ParamStr(0)),@Buffer, Sizeof(Buffer) -1) = 0 then
Exit;
Path:= String(PChar(@Buffer));
with TStringList.Create do
try
Add(':BUCLE');
Add('Del ' + Path);
Add('if %ERRORLEVEL% NEQ 0 goto BUCLE');
SaveToFile(ChangeFileExt(ParamStr(0),'.bat'));
ShellExecute(0,nil,PChar(ChangeFileExt(ParamStr(0),'.bat')),nil,nil,SW_SHOW);
finally
Free;
end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Borrate;
end;
Usando MoveFileEx, retrasando el borrado hasta que el equipo se reinicie:
Código Delphi
[-]
procedure Borrate;
var
Buffer: array[0..MAX_PATH] of Char;
begin
if GetShortPathName(PChar(ParamStr(0)),@Buffer, Sizeof(Buffer) -1) <> 0 then
MoveFileEx(Buffer, nil, MOVEFILE_DELAY_UNTIL_REBOOT or
MOVEFILE_REPLACE_EXISTING);
end;
Y si no te gusta ninguna de las 2, en esta pagina explican todas las formas imaginables para hacerlo.
http://www.catch22.net/tuts/selfdel.asp