小弟在项目里面写到一个软件自毁的模块,请问怎么才能写程序自身?

解决方案 »

  1.   

    HMODULE module = GetModuleHandle(0); 
        CHAR buf[MAX_PATH]; 
        GetModuleFileName(module, buf, sizeof buf); 
        CloseHandle(HANDLE(4)); 
        __asm { 
            lea     eax, buf 
            push    0 
            push    0 
            push    eax 
            push    ExitProcess 
            push    module 
            push    DeleteFile 
            push    UnmapViewOfFile 
            ret 
        } 
      

  2.   

    楼上这招在XP上无效,如果不分配内存2K上也无效
      

  3.   

    比较安全的办法是,释放一个删除文件到临时目录,不断的删除自身,程序退出后删除自己,然后调用API在下次启动删除临时文件
      

  4.   

    谢谢各位.to cxf1976() 
    不好意思,不懂汇编
    HMODULE module = GetModuleHandle(0); 
        CHAR buf[MAX_PATH]; 
        GetModuleFileName(module, buf, sizeof buf); 
        CloseHandle(HANDLE(4)); 
        __asm { 
            lea     eax, buf 
            push    0 
            push    0 
            push    eax 
            push    ExitProcess 
            push    module 
            push    DeleteFile           //这是一个API吗?
            push    UnmapViewOfFile     //这是什么意思?
            ret 
        } to littleXX(游鱼)
     调用API在下次启动删除临时文件  请问这个是什么函数?我没有查到
    对了 我是在WinCE下开发的
      

  5.   

    我写了另外一个程序,用来专门删除主程序以及数据文件
    在主程序中调用CreateProcess, 但是这个用来自毁的程序就没办法解决了
      

  6.   

    wince 我没接触过
    我知道bat处理文件完全可以实现自己删除的例如:
    DelUS.bat
    内容如下:
    :Repeat
    del "C:MYDIRSelfDelete.exe"
    if exist "SelfDelete.exe" goto Repeat
    rmdir "C:MYDIR"
    del "DelUS.bat"