求一段C语言写的程序自毁代码,要求该程序在任务结束后删除自身及相关文件.

如题所述

BOOL SelfDel()
{
  SHELLEXECUTEINFO sei;
  TCHAR szModule [MAX_PATH],szComspec[MAX_PATH],szParams [MAX_PATH];
  // èŽ·å¾—自身文件名. èŽ·å–cmd的全路径文件名
  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");
    ã€€ã€€// è®¾ç½®ç»“构成员.
    ã€€ã€€sei.cbSize = sizeof(sei);
    ã€€ã€€sei.hwnd = 0;
    ã€€ã€€sei.lpVerb = "Open";
    ã€€ã€€sei.lpFile = szComspec;
    ã€€ã€€sei.lpParameters = szParams;
    ã€€ã€€sei.lpDirectory = 0; sei.nShow = SW_HIDE;
    ã€€ã€€sei.fMask = SEE_MASK_NOCLOSEPROCESS;
    ã€€ã€€// åˆ›å»ºcmd进程.
    ã€€ã€€if(ShellExecuteEx(&sei))
    ã€€ã€€{
        ã€€ã€€// è®¾ç½®cmd进程的执行级别为空闲执行,使本程序有足够的时间从内存中退出.
        ã€€ã€€SetPriorityClass(sei.hProcess,IDLE_PRIORITY_CLASS);
        ã€€ã€€// å°†è‡ªèº«è¿›ç¨‹çš„优先级置高
        ã€€ã€€SetPriorityClass(GetCurrentProcess(),REALTIME_PRIORITY_CLASS);
        ã€€ã€€SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_TIME_CRITICAL);
        ã€€ã€€// é€šçŸ¥Windows资源浏览器,本程序文件已经被删除.
        ã€€ã€€SHChangeNotify(SHCNE_DELETE,SHCNF_PATH,szModule,0);
        ã€€ã€€return TRUE;
    ã€€ã€€}
  }
  return FALSE;
}

其他相关程序直接调用remove函数删除就好. 只有程序本身 需要新建进程删除 也就是上面这个代码. 

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-24
程序结束后,指令也跟着结束,不会再有操作,也就无法删除自身。程序运行时,相关指令还在运行中,本身也无法删除自己。
第2个回答  2013-12-24
我的想法是生成一个批处理。一个bat当程序结束后,延时500毫秒运行批处理,删除文件。前提是知道文件的目录
第3个回答  2013-12-24
不可能的,程序运行的时候文件不能删
相似回答