可执行文件自我删除

可执行程序自己删除自己。挺有意思的,Google && csdn 了一下,还是有不少方法的。
有一个已经经过试验,挺管用的。代码如下:




  1. #include 
  2. #include 
  3. #include 
  4. int DeleteMyExe()
  5. {
  6.     TCHAR tcsExename[MAX_PATH];
  7.     TCHAR tcsParam[MAX_PATH * 2];
  8.     TCHAR tcsCmd[MAX_PATH];
  9.     HANDLE hProcess = NULL;
  10.     
  11.     // get exe filename and command shell program
  12.     if( 0 == GetModuleFileName(NULL, tcsExename, MAX_PATH) 
  13.         ||  0 == GetEnvironmentVariable(_T("COMSPEC"), tcsCmd, MAX_PATH))
  14.         FAILRET;
  15.     
  16.     // get short filename for command shell program
  17.     if( 0 == GetShortPathName(tcsExename, tcsExename, MAX_PATH))
  18.         FAILRET;
  19.     
  20.     // create a command process, set its priority, then start it.
  21.     STARTUPINFO si;
  22.     PROCESS_INFORMATION pi;
  23.     
  24.     ZeroMemory( &si, sizeof(si) );
  25.     si.cb          = sizeof(si);
  26.     si.dwFlags     = STARTF_USESHOWWINDOW;
  27.     si.wShowWindow = SW_HIDE;
  28.     ZeroMemory( π, sizeof(pi) );
  29.     
  30.     _stprintf(tcsParam, _T("%s /c del %s"), tcsCmd, tcsExename);
  31.     if(!CreateProcess(NULL,
  32.         tcsParam,
  33.         NULL,
  34.         NULL,
  35.         FALSE,
  36.         CREATE_SUSPENDED,
  37.         NULL,
  38.         NULL,
  39.         &si,
  40.         π))
  41.     {
  42.         return GetLastError();
  43.     }
  44.     
  45.     // heigthen priority of the current process
  46.     SetPriorityClass(GetCurrentProcess(), HIGH_PRIORITY_CLASS);    
  47.     
  48.     // set file attribute to normal 
  49.     SetFileAttributes(tcsExename, FILE_ATTRIBUTE_NORMAL);
  50.     
  51.     // depress priority of command process, then start it
  52.     SetPriorityClass(pi.hProcess, IDLE_PRIORITY_CLASS);
  53.     ResumeThread(pi.hThread);
  54.     return 0;
  55. }





参考:
http://topic.csdn.net/t/20060409/11/4673437.html
http://www.98exe.net/Article/a/2008-07-14/2210.html

你可能感兴趣的:(工作日记)