我也谈一下EXE自删除的问题

本文介绍了一种在Windows环境下实现可执行文件(EXE)自我删除的方法。具体来说,通过在程序退出前创建一个独立线程来启动一个专门用于删除当前运行EXE文件的进程。该方法利用CreateProcess API来生成一个执行命令行参数为删除指定EXE文件的子进程。

这个问题其实不难,这位仁兄的帖子已经说了三种方法 http://blog.csdn.net/jimmy_w/archive/2007/01/14/1483055.aspx
这个问题其实很简单,就是在进程结束后能有另外一个进程将此程序删除,这个问题解决了那么就迎刃而解了。在程序关闭前启动一个线程,此线程生成一个删除进程,那么这时删除进程和本进程是同步的,且不会因本进程关闭而终止,所以EXE自删除的问题就解决了。
//生成线程
HANDLE UiThreadHandle; 
DWORD WINAPI UiListShowThread (LPVOID lpVoid){ 

  // Sleep(500); 
EDosFunction edf; 
edf.eDosTest1(); 

return 1; 



void CtestdosDlg::OnBnClickedButton1() 

// TODO: 在此添加控件通知处理程序代码 
UiThreadHandle = CreateThread(NULL, 0,UiListShowThread, 0, 0, 0); 
SetThreadPriority(UiThreadHandle,30); 

OnOK(); 



//生成删除进程,我的EXE的名称是testdos.exe,当然也可以通过API动态获取本文件名称
void EDosFunction::eDosTest1(){ 


PROCESS_INFORMATION pi; 
STARTUPINFO si ; 
si.cb = sizeof(STARTUPINFO); 
GetStartupInfo(&si); 

si.wShowWindow = SW_SHOW; 
si.dwFlags = STARTF_USESHOWWINDOW; 
DWORD dwWritten; 

CString cCommandLine="cmd /c del testdos.exe"; 
BOOL ret = CreateProcess(NULL, cCommandLine.GetBuffer(cCommandLine.GetLength()), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); 
cCommandLine.ReleaseBuffer(); 


HANDLE hProcess=pi.hProcess; 
// CloseHandle( pi.hProcess ); 

//CloseHandle( pi.hThread ); 
//HANDLE hProcess = GetCurrentProcess();//get current process 

// TerminateProcess(pi.hProcess,0);  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值