您的位置:首页 > 编程语言

VC 程序自我删除代码

2010-01-28 18:06 246 查看
程序自我删除代码,经测试好用

BOOL DeleteMySelf()
{
TCHAR   szModule   [MAX_PATH],
szComspec[MAX_PATH],
szParams   [MAX_PATH];
//   get   file   path   names:
if((GetModuleFileName(0,szModule,MAX_PATH)!=0)   &&
(GetShortPathName(szModule,szModule,MAX_PATH)!=0)   &&
(GetEnvironmentVariable(_T("COMSPEC"),szComspec,MAX_PATH)!=0))
{
//   set   command   shell   parameters
lstrcpy(szParams,_T("   /c   del   "));
lstrcat(szParams,   szModule);
lstrcat(szParams,_T("   >   nul") );
lstrcat(szComspec,   szParams);

//   set   struct   members
STARTUPINFO si={0};
PROCESS_INFORMATION pi={0};
si.cb   =   sizeof(si);
si.dwFlags   =   STARTF_USESHOWWINDOW;
si.wShowWindow   =   SW_HIDE;
//   increase   resource   allocation   to   program
SetPriorityClass(GetCurrentProcess(),
REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread(),
THREAD_PRIORITY_TIME_CRITICAL);
//   invoke   command   shell
if(CreateProcess(0,   szComspec,   0,   0,   0,CREATE_SUSPENDED|
DETACHED_PROCESS,   0,   0,   &si,   π))
{
//   suppress   command   shell   process   until   program   exits
SetPriorityClass(pi.hProcess,IDLE_PRIORITY_CLASS);
SetThreadPriority(pi.hThread,THREAD_PRIORITY_IDLE);
//   resume   shell   process   with   new   low   priority
ResumeThread(pi.hThread);
//   everything   seemed   to   work
return   TRUE;
}
else   //   if   error,   normalize   allocation
{
SetPriorityClass(GetCurrentProcess(),
NORMAL_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread(),
THREAD_PRIORITY_NORMAL);
}
}
return   FALSE;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: