程序删除自身
// 利用批处理文件构造一个循环,只要在 OnClose() 中调用 DeleteMe() 就可以删除自身
procedure DeleteMe();
var
BatchFile: TextFile;
BatchFileName: string ;
ProcessInfo: TProcessInformation;
StartUpInfo: TStartupInfo;
begin
BatchFileName : = ExtractFilePath(ParamStr( 0 )) + ' _deleteme.bat ' ;
AssignFile(BatchFile, BatchFileName);
Rewrite(BatchFile);
Writeln(BatchFile, ' :try ' );
Writeln(BatchFile, ' del " ' + ParamStr( 0 ) + ' " ' );
Writeln(BatchFile,
' if exist " ' + ParamStr( 0 ) + ' " ' + ' goto try ' );
Writeln(BatchFile, ' del %0 ' );
CloseFile(BatchFile);
FillChar(StartUpInfo, SizeOf(StartUpInfo), $ 00 );
StartUpInfo.dwFlags : = STARTF_USESHOWWINDOW;
StartUpInfo.wShowWindow : = SW_HIDE;
if CreateProcess( nil , PChar(BatchFileName), nil , nil , False, IDLE_PRIORITY_CLASS, nil , nil , StartUpInfo, ProcessInfo) then
begin
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
end ;
end ;
procedure DeleteMe();
var
BatchFile: TextFile;
BatchFileName: string ;
ProcessInfo: TProcessInformation;
StartUpInfo: TStartupInfo;
begin
BatchFileName : = ExtractFilePath(ParamStr( 0 )) + ' _deleteme.bat ' ;
AssignFile(BatchFile, BatchFileName);
Rewrite(BatchFile);
Writeln(BatchFile, ' :try ' );
Writeln(BatchFile, ' del " ' + ParamStr( 0 ) + ' " ' );
Writeln(BatchFile,
' if exist " ' + ParamStr( 0 ) + ' " ' + ' goto try ' );
Writeln(BatchFile, ' del %0 ' );
CloseFile(BatchFile);
FillChar(StartUpInfo, SizeOf(StartUpInfo), $ 00 );
StartUpInfo.dwFlags : = STARTF_USESHOWWINDOW;
StartUpInfo.wShowWindow : = SW_HIDE;
if CreateProcess( nil , PChar(BatchFileName), nil , nil , False, IDLE_PRIORITY_CLASS, nil , nil , StartUpInfo, ProcessInfo) then
begin
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
end ;
end ;