怎样让程序自杀的?
程序自杀是一个比较热门的话题,不过好像没有一个完美的解决方案,我只看到 cuteftp pro真正做到了!
我找的在XP下都不可以用?

解决方案 »

  1.   

    问题解决!代码如下:
    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 WINAPI WinMain(HINSTANCE h, HINSTANCE b, LPSTR psz, int n) 
    {
    SelfDelete();

    return(0);

    }
      

  2.   

    我见过两种方法,
    一是 FILE_FLAG_DELETE_ON_CLOSE
    二是 那个 asm 的 UnmapViewOfFile 的巧妙方法。
      

  3.   

    晚了,
    那个asm的UnmapViewOfFile 只能用于Win2000。
      

  4.   

    xiangshifu99()   能解释一下么?
      

  5.   

    SERVER 2003 通过
    XP HOME 通过
    2000 通过
      

  6.   

    http://asp.6to23.com/nowcan/newweb/list.asp?id=254
    就是这个,不过是英文的。
      

  7.   

    远程线程显示一个对话框时狂非法操作 是因为直接调用了 messagebox,必须把 messagebox的地址做为参数传入远程线程
    不过你的想法好!
      

  8.   

    见过别人的一个程序,好像是在程序启动时创建一个复制自身的暂时文件,然后把原来的文件删除,这样运行的是复制的暂时文件。
    具体的代码忘了,不好意思:-(
    不过到google可以找到的
      

  9.   

    dreamy(Sharping),你说那个暂时文件怎么删除?