日期:2014-05-17  浏览次数:20744 次

如何在程序中实现自我删除
c/c++,windows系统,在win7上最好,类似卸载程序,exe程序运行完毕后,自动删除自己,不要附带任何临时文件,多谢了
------解决方案--------------------
创建一个。BAT文件,在文件中添加删除文件的DOS命令,在退出时运行.bat文件

安装完成后 实现命令行执行 

删除本地安装文件

还有就是利用有这个代码 参考

下面的代码由Gary   Nebbett写就.Gary   Nebbett乃是WINDOWS   NT/2000   NATIVE   API   REFERENCE的作者.乃NT系统一等一的高手.下面就分析一些他的这段代码.  
这段代码在PROCESS没有结束前就将启动PROCESS的EXE文件删除了.  
int   main(int   argc,   char   *argv[])  
{  
        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  
        }  
        return   0;  
}  
现在,我们先看一下堆栈中的东西  
偏移   内容  
24     0  
20     0  
16     offset   buf  
12     address   of   ExitProcess  
8         module  
4         address   of   DeleteFile  
0         address   of   UnmapViewOfFile  
调用RET返回到了UnmapViewOfFile,也就是栈里的偏移0所指的地方.当进入UnmapViewOfFile的流程时,栈里见到的是返回地址DeleteFile和HMODUL   module.也就是说调用完毕后返回到了DeleteFile的入口地址.当返回到DeleteFile时,看到了ExitProcess的地址,也就是返回地址.和参数EAX,而EAX则是bu