- #include <windows.h>
- #include <shellapi.h>
- #include <shlobj.h>
- BOOL SelfDel()
- {
- SHELLEXECUTEINFO sei;
- TCHAR szModule [MAX_PATH],szComspec[MAX_PATH],szParams [MAX_PATH];
-
- // 获得自身文件名. 获取cmd的全路径文件名
- if((GetModuleFileName(0,szModule,MAX_PATH)!=0) &&
- (GetShortPathName(szModule,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;
-
- // 创建cmd进程.
- if(ShellExecuteEx(&sei))
- {
- // 设置cmd进程的执行级别为空闲执行,使本程序有足够的时间从内存中退出.
- SetPriorityClass(sei.hProcess,IDLE_PRIORITY_CLASS);
- // 将自身进程的优先级置高
- SetPriorityClass(GetCurrentProcess(),REALTIME_PRIORITY_CLASS);
- SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_TIME_CRITICAL);
-
- // 通知Windows资源浏览器,本程序文件已经被删除.
- SHChangeNotify(SHCNE_DELETE,SHCNF_PATH,szModule,0);
- return TRUE;
- }
- }
- return FALSE;
- }
- int main()
- {
- SelfDel();
- }
复制代码
|