Coder Jozu

I believe --- 这里坚持原创,拒绝转贴

  VC知识库BLOG :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 登录 ::
  13 随笔 :: 4 文章 :: 87 评论 :: 1 Trackbacks
<2006年2月>
2930311234
567891011
12131415161718
19202122232425
2627281234
567891011

留言簿(4)

随笔分类

随笔档案

文章分类

文章档案

东接西链

搜索

最新评论

阅读排行榜

评论排行榜

// Delself.cpp: 删除正在运行的程序
//
// Coder Jozu

#include <windows.h>
#include <tchar.h>
#include <shlobj.h>

#pragma comment(lib, "Shell32.lib")

#define ERROR_RET  1
#define ERROR_SUC  0

#define COMSPEC   TEXT("COMSPEC")
#define ARGS_PREX  TEXT(" /c del ")
#define ARGS_ERR_REDIR TEXT(" >NUL")

int main(int argc, char** argv)
{
 TCHAR szModuleName[MAX_PATH] = { 0 };
 TCHAR szCommand[MAX_PATH] = { 0 };
 TCHAR szParams[MAX_PATH] = { 0 };

 STARTUPINFO si = { sizeof(STARTUPINFO) };
 PROCESS_INFORMATION pi;


 if(!GetModuleFileName(NULL, szModuleName, MAX_PATH))
  return ERROR_RET;
 
 if(!GetShortPathName(szModuleName, szModuleName, MAX_PATH))
  return ERROR_RET;

 if(!GetEnvironmentVariable(COMSPEC, szCommand, MAX_PATH))
  return ERROR_RET;

 _tcscat(szCommand, ARGS_PREX);
 _tcscat(szCommand, szModuleName);
 _tcscat(szCommand, ARGS_ERR_REDIR);
 
 if(SetPriorityClass(GetCurrentProcess(),
  REALTIME_PRIORITY_CLASS))
 {
  if(SetThreadPriority(GetCurrentThread(),
   THREAD_PRIORITY_TIME_CRITICAL))
  {
   //
   if(CreateProcess(NULL,
    szCommand,
    NULL,
    NULL,
    FALSE,
    0,
    NULL,
    NULL,
    &si,
    &pi))
   {
    SetPriorityClass(pi.hProcess,
     IDLE_PRIORITY_CLASS);

    SetProcessPriorityBoost(pi.hProcess,
     TRUE);

    SHChangeNotify(SHCNE_DELETE,
     SHCNF_PATH,
     szModuleName,
     NULL);
    return TRUE;
   }
  }
  else
  {
   SetPriorityClass(GetCurrentProcess(),
    NORMAL_PRIORITY_CLASS);
  }
 }
 return ERROR_RET;
}

posted on 2004-10-27 05:36 Coder Jozu 阅读(3206) 评论(3)  编辑 收藏

评论

# re: Delete myself (exe file version) 2006-02-10 10:34 clzhang
写的好,能解释一下?

# re: Delete myself (exe file version) 2008-08-20 15:00 UMU
不用测试就知道是进程退出后才删除的,虽然用了 SHChangeNotify 来欺骗人民群众

# re: Delete myself (exe file version) 2008-08-20 15:19 UMU
// Delself.cpp: 删除正在运行的程序

这个注解应该改一下,不是“删除正在运行的程序”,是“推出后删除自己身”

标题  
姓名  
主页
验证码 *
内容   
  登录  使用高级评论  Top
[使用Ctrl+Enter键可以直接提交]