关于自删除问题
在书上看到了一段自删除代码,但试了一下,没有实现,建立一个对话框工程,一个按钮,按钮实现自删除,但每次点了按钮后,文件好像是删除了,但一刷新,马上文件又回来了,不知道为什么,请高手指点一下.代码如下:
SHELLEXECUTEINFO sei;
TCHAR szModule[MAX_PATH],szComspec[MAX_PATH],szParams[MAX_PATH];
if((GetModuleFileName(0,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_NOCLOSEPROCESS;
if(ShellExecuteEx(&sei))
{
SetPriorityClass(sei.hProcess,IDLE_PRIORITY_CLASS);
SetPriorityClass(GetCurrentProcess(),REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_TIME_CRITICAL);
SHChangeNotify(SHCNE_DELETE,SHCNF_PATH,szModule,0);
AfxMessageBox( "Succeed! ");
ExitProcess(0);
}
}
[解决办法]
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
}