分类: C/C++
2009-09-07 11:43:43
#include
#include
#include
BOOL SelfDelete()
{
TCHAR szModule [MAX_PATH], szComspec[MAX_PATH], szParams[MAX_PATH];
GetModuleFileName(0,szModule,MAX_PATH);
GetShortPathName(szModule,szModule,MAX_PATH);
GetEnvironmentVariable("COMSPEC",szComspec,MAX_PATH);
strcpy(szParams," /c del ");strcat(szParams, szModule);strcat(szParams, " > nul");
//strcat(szComspec, szParams);
SHELLEXECUTEINFO ExeInfo;
ZeroMemory(&ExeInfo,sizeof(ExeInfo));
ExeInfo.cbSize = sizeof(ExeInfo);
ExeInfo.hwnd = 0;
ExeInfo.lpVerb = "Open"; //执行动作,打开
ExeInfo.lpFile = szComspec; //执行文件全路径名称
ExeInfo.lpParameters = szParams; //执行参数
ExeInfo.nShow = SW_HIDE; //执行方式,隐藏窗口。
ExeInfo.fMask = SEE_MASK_NOCLOSEPROCESS; //设置为ShellExecute函数结束后进程退出
if (!ShellExecuteEx(&ExeInfo)) return FALSE;
//设置命令行进程级别为空闲基本,这使得本程序有足够的时间退出。
SetPriorityClass(ExeInfo.hProcess,IDLE_PRIORITY_CLASS);
//设置本程序进程基本为实时执行,快速退出。
SetPriorityClass(GetCurrentProcess(),REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_TIME_CRITICAL);
//通知资源管理器,本程序删除
SHChangeNotify(SHCNE_DELETE,SHCNF_PATH,szModule,NULL);
return TRUE;
}