似乎可以通过驻入到其他进程(如explorer),让它来杀自己

解决方案 »

  1.   

    可以的,你首先要得到本进程的handle,这个时候你要创建一个临时进程来帮助你删除原进程
    .网上有不少这样的代码的.
      

  2.   

    http://blog.csdn.net/Y___Y/archive/2007/04/11/1561167.aspx
      

  3.   

    __asm
        {
            lea     eax, filenameDLL
    push    0
    push    0
    push    eax
    push    ExitProcess
    push    g_hmodDLL
    push    DeleteFile
    push    FreeLibrary
    ret
        }这段代码可以实现退出自己,并将自己删除掉,你也可以再网上搜索,关于自删除的。
      

  4.   


     * 程序自删除实现ProgSelfDel
     *******************************************************************************/
    BOOL ProgSelfDel(VOID)
    {
    SHELLEXECUTEINFO sei;
    TCHAR szModule[MAX_PATH]; //存放模块的完整路径
    TCHAR szComspec[MAX_PATH];//存放命令窗口的全路径
    TCHAR 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");

    // 设置结构成员.
    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_NO_CONSOLE|SEE_MASK_NOCLOSEPROCESS;
    //sei.fMask = SEE_MASK_NOCLOSEPROCESS;

    // 执行shell命令.
    if(ShellExecuteEx(&sei))
    {
               // 设置命令行进程的执行级别为空闲执行,使本程序有足够的时间从内存中退出. 
       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;

    以前在资源里面看到的代码,自删除,我调式过,能实现
      

  5.   

    线程先启动一个删除自己的exe的批处理程序 然后调用exit();