• Delphi程序自删除的几种方法


    program Project1;  
    uses  
      SysUtils,  windows;  
    var f:textfile;  
        a:string;  
      
    begin  
        a:=paramstr(0);   
        assignfile(f, 'delself.bat');    
        rewrite(f);   
        writeln(f, 'del ' + pchar('"'+pchar(a)+'"'));   
        writeln(f, 'del %0');    
        closefile(f);   
        winexec('delself.bat', sw_hide);   
    end. 

    http://blog.csdn.net/emdfans/article/details/11769483

    program Project1;  //方法一
    uses
      Windows;
    function WinExec(lpCmdline: PAnsiChar; uCmdShow: LongWord): LongWord;
                     stdcall; external 'kernel32.dll' name 'WinExec';
    function ExtractFilePath(FileName: string): string;
    begin
      Result := '';
      while ((Pos('/', FileName) <> 0) or (Pos('/', FileName) <> 0)) do
      begin
        Result := Result + Copy(FileName, 1, 1);
        Delete(FileName, 1, 1);
      end;
    end;
    
    procedure DeleteMe;
    var
      BatchFile: TextFile;
      BatchFileName: string;
    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);
    end;
    begin
      DeleteMe ;
      WinExec('_deleteme.bat',SW_HIDE);
    end.
    ------------------------------------------------------------------------------
    简单自删除    //方法二
    var
      f:textfile;
      self:string;
    begin
      self:=paramstr(0);
      assignfile(f,'delself.bat');
      rewrite(f);
      writeln(f,'del '+pchar('"'+pchar(self)+'"'));
      writeln(f,'del %0');
      closefile(f);
      WinExec('delself.bat',sw_hide);
    end;
    ---------------------------------------------------------------------------------
    program Project2;   //方法三
    uses
      Windows, ShellAPI, ShlObj, SysUtils2;
    function Suicide: Boolean;
    var
      sei: TSHELLEXECUTEINFO;
      szModule:  PChar;
      szComspec: PChar;
      szParams:  PChar;
    begin
      szModule  := AllocMem(MAX_PATH);
      szComspec := AllocMem(MAX_PATH);
      szParams  := AllocMem(MAX_PATH);
      // get file path names:
      if ((GetModuleFileName(0,szModule,MAX_PATH)<>0) and
        (GetShortPathName(szModule,szModule,MAX_PATH)<>0) and
        (GetEnvironmentVariable('COMSPEC',szComspec,MAX_PATH)<>0)) then
      begin
        // set command shell parameters
        lstrcpy(szParams,'/c del ');
        lstrcat(szParams, szModule);
        // set struct members
        sei.cbSize      := sizeof(sei);
        sei.Wnd          := 0;
        sei.lpVerb      := 'Open';
        sei.lpFile      := szComspec;
        sei.lpParameters := szParams;
        sei.lpDirectory  := 0;
        sei.nShow        := SW_HIDE;
        sei.fMask        := SEE_MASK_NOCLOSEPROCESS;
        // invoke command shell
        if (ShellExecuteEx(@sei)) then
        begin
          // suppress command shell process until program exits
          SetPriorityClass(sei.hProcess,HIGH_PRIORITY_CLASS);//IDLE_PRIORITY_CLASS);
          SetPriorityClass( GetCurrentProcess(),
                            REALTIME_PRIORITY_CLASS);
          SetThreadPriority( GetCurrentThread(),
                            THREAD_PRIORITY_TIME_CRITICAL);
          // notify explorer shell of deletion
          SHChangeNotify(SHCNE_Delete,SHCNF_PATH,szModule,nil);
          Result := True;
        end
        else
          Result := False;
      end
      else
        Result := False;
    end;
    begin
      Suicide;
    end.

    http://blog.csdn.net/cmdasm/article/details/9961893

  • 相关阅读:
    The library 'hostpolicy.dll' required to execute the application was not found in
    矩阵乘法
    2019-11-1
    四边形不等式的应用
    2019-10-30
    2019-10-29
    差分与前缀和
    平衡树SPLAY
    可爱的树链剖分(染色)
    cable tv network
  • 原文地址:https://www.cnblogs.com/findumars/p/5599418.html
Copyright © 2020-2023  润新知