首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

关于自删除有关问题

2012-02-20 
关于自删除问题在书上看到了一段自删除代码,但试了一下,没有实现,建立一个对话框工程,一个按钮,按钮实现自

关于自删除问题
在书上看到了一段自删除代码,但试了一下,没有实现,建立一个对话框工程,一个按钮,按钮实现自删除,但每次点了按钮后,文件好像是删除了,但一刷新,马上文件又回来了,不知道为什么,请高手指点一下.代码如下:


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
}

热点排行