首先,启动Visual C++6.0,新建一个MFC AppWizard(exe)类型的项目,项目名为SelfDelete,选择基于对话框模式创建程序框架。  
    接下来,打开资源编辑器,添加一个按钮控件,设置内容为开始“自杀”,如图一所示:  
   启动ClassWizard,为新添加的控件新建CLICK事件处理函数,再打开该函数,添加“自杀”代码如下:  
void CSelfDeleteDlg::OnButton1()    
{    
   // TODO: Add your control notification handler code here    
   SHELLEXECUTEINFO sei;  
   TCHAR szModule [MAX_PATH],szComspec[MAX_PATH],szParams [MAX_PATH];  
   //获取文件路径名  
   if((GetModuleFileName(0,szModule,MAX_PATH)!=0) &&  
        (GetShortPathName(szModule,szModule,MAX_PATH)!=0) &&  
            (GetEnvironmentVariable("COMSPEC",szComspec,MAX_PATH)!=0))  
   {  //设置命令行参数。  
      lstrcpy(szParams,"/c del ");  
      lstrcat(szParams, szModule);  
      lstrcat(szParams, " > nul");        //初始化SHELLEXECUTEINFO结构成员  
      sei.cbSize = sizeof(sei); //设置类型大小。  
      //命令窗口进程句柄,ShellExecuteEx函数执行时设置。  
      sei.hwnd = 0;  
      sei.lpVerb = "Open";        //执行动作为“打开执行”。  
      sei.lpFile = szComspec;      //执行程序文件全路径名称。  
      sei.lpParameters = szParams; //执行参数。  
      sei.lpDirectory = 0;  
      //显示方式,此处使用隐藏方式阻止出现命令窗口界面。  
      sei.nShow = SW_HIDE;  
      //设置为SellExecuteEx函数结束后进程退出。  
      sei.fMask = SEE_MASK_NOCLOSEPROCESS;  
      //创建执行命令窗口进程。  
      if(ShellExecuteEx(&sei))  
      {  //设置命令行进程的执行级别为空闲执行,这使本程序有足够的时间从内存中退出。    
         SetPriorityClass(sei.hProcess,IDLE_PRIORITY_CLASS);  
         //设置本程序进程的执行级别为实时执行,这本程序马上获取CPU执行权,快速退出。    
         SetPriorityClass(GetCurrentProcess(),REALTIME_PRIORITY_CLASS);  
         SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_TIME_CRITICAL);    
         //通知Windows资源浏览器,本程序文件已经被删除。  
         SHChangeNotify(SHCNE_DELETE,SHCNF_PATH,szModule,0);  
         //执行退出程序  
         EndDialog(0);  
       }  }  }  

解决方案 »

  1.   

    SelfDelete  不能调试,只能运行调试就出错,直接运行就没有问题这是经验
      

  2.   

    EndDialog并不会使对话框马上关闭,更不会使进程马上退出,它只是设置一种暂停状态,它必须等待其它的消息能得到机会处理完成,一旦消息被处理完毕,对话框窗口才真正被销毁。
    不如直接执行exit()试验一下。
      

  3.   

    正在运行中的程序,自己杀死自己,好像windows核心编程里边说了一种办法!
    你的这个方法不行吧!