실행파일은 일반적인 시스템 함수로는 자기자신을 지우지 못한다.
그래서 .bat 파일을 이용한다.



uses
  .. Classes, ShellApi;




procedure DeleteMySelf;
var
  BatchPath: String;
  sList: TStringList;
begin
  // 경로 세팅
  BatchPath:=ExtractFilePath(ParamStr(0))+'del.bat';

  // .bat 파일 생성
  sList:=TStringList.Create;
  try
    sList.Add(':DEL1');
    sList.Add('del "'+ParamStr(0)+'"');
    sList.Add('IF EXIST "'+ParamStr(0)+'" GOTO DEL1');
    sList.Add(':DEL2');
    sList.Add('del "'+BatchPath+'"');
    sList.Add('IF EXIST "'+BatchPath+'" GOTO DEL2');
    sList.SaveToFile(BatchPath);    
  finally
    FreeAndNil(sList);
  end;
  
  // bat 실행 (실행파일 삭제->bat 파일 삭제)
  ShellExecute(0, 'open', PChar(BatchPath), nil, nil, SW_HIDE);
end;





Posted by bloodguy
,