AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > VC编程

利用shell编程实现进程删除自身

51自学网 2015-08-30 http://www.wanshiok.com

此代码是一个纯SDK代码,没有用到MFC,程序中只有一个函数SelfDelete(),读起来比较好懂,对于研究Shell编程有一定作用。

#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#include <shlobj.h>
#include <shlwapi.h>


BOOL SelfDelete()
{
 TCHAR szModule [MAX_PATH],
    szComspec[MAX_PATH],
    szParams [MAX_PATH];

 // get file path names:
 if((GetModuleFileName(0,szModule,MAX_PATH)!=0) &&
    (GetShortPathName(szModule,szModule,MAX_PATH)!=0) &&
    (GetEnvironmentVariable("COMSPEC",szComspec,MAX_PATH)!=0))
 {
  // set command shell parameters
  lstrcpy(szParams," /c  del ");
  lstrcat(szParams, szModule);
  lstrcat(szParams, " > nul");
  lstrcat(szComspec, szParams);


  // set struct members
  STARTUPINFO  si={0};
  PROCESS_INFORMATION pi={0};
  si.cb = sizeof(si);
  si.dwFlags = STARTF_USESHOWWINDOW;
  si.wShowWindow = SW_HIDE;

  // increase resource allocation to program
  SetPriorityClass(GetCurrentProcess(),
    REALTIME_PRIORITY_CLASS);
  SetThreadPriority(GetCurrentThread(),
   THREAD_PRIORITY_TIME_CRITICAL);

  // invoke command shell
  if(CreateProcess(0, szComspec, 0, 0, 0,CREATE_SUSPENDED|
     DETACHED_PROCESS, 0, 0, &si, &pi))
  {
   // suppress command shell process until program exits
   SetPriorityClass(pi.hProcess,IDLE_PRIORITY_CLASS);
                        SetThreadPriority(pi.hThread,THREAD_PRIORITY_IDLE);

   // resume shell process with new low priority
   ResumeThread(pi.hThread);

   // everything seemed to work
   return TRUE;
  }
  else // if error, normalize allocation
  {
   SetPriorityClass(GetCurrentProcess(),
        NORMAL_PRIORITY_CLASS);
   SetThreadPriority(GetCurrentThread(),
         THREAD_PRIORITY_NORMAL);
  }
 }
 return FALSE;
}
 
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
 
 TCHAR   sImeFile[MAX_PATH],
      szDir[MAX_PATH];


    MessageBox(NULL, _T("now delete myselef ?/n"), "Warning", MB_OK);
 

// if(!DelIMEFile(hInstance, sImeFile))
//  return FALSE;
   
//    DelReg();
 

    SelfDelete();

}

 

 

 
说明
:本教程来源互联网或网友上传或出版商,仅为学习研究或媒体推广,wanshiok.com不保证资料的完整性。
上一篇:用Visual&nbsp;C++设计窗体探测器  下一篇:CButtonST类公共接口函数的介绍