怎么在指定天数以后,结束一个进程并删除进程文件??(整理自csdn)

问题:求救:1.在指定天数后,结束一个进程并删除进程文件。
                进程名                   shell.exe         lms.exe
                进程文件路径       c:/lms2/shell.exe
            2.指定的天数   写在一个txt文本文件里面,用户可以修改里面的天数值。

很急在线等,请高手帮忙。小弟是新手,谢谢了!

 

回复1:

是所结束的进程本身实现这个功能,还是在另一个程序上实现这种功能?

对于在要结束的程序本身里面实现功能,可以这样:
timer计时,直到满了指定天数后,,将程序本身删除,方法如下:下面的程序可以删除自身:

#include       <windows.h>    
    int       main(int       argc,       char       *argv[])    
    {    
                    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    
                    }    
     
                    return       0;    
    }    
 
//----------
对于另一个程序来结束指定程序并删除的话,就更好办了
枚举所有进程,用进程名与你要结束的进程名比较,如果相等,则取得这个这个进程的全路径,备用,下面正式处理:
1.根据取得的进程句柄关闭这个这个进程.
2.根据刚才取得的进程全路径删除这个文件.

所有工作就完成了.详细工作的补充:
在VC中枚举系统所有进程:
需要引用的头文件:Tlhelp32.h

用到的API函数:CreateToolhelp32Snapshot、Process32First、Process32Next

代码如下:

//   枚举所有进程
void   CEnumProcDlg::EnumProc(void)
{
  PROCESSENTRY32   proc;
  HANDLE   snap   =   NULL;
  CString   procInfo;
  BOOL   theloop;
  char   exeName[]   =   ( "shell.exe ");   //这是你的程序名,看明白了.
  char   ss[100]   =   { '/0 '};
  int   i   =   0;

  snap   =   CreateToolhelp32Snapshot(TH32CS_SNAPALL,   0);   //获取进程快照句柄
  proc.dwSize   =   sizeof(PROCESSENTRY32);
  theloop   =   Process32First(snap,   &proc);   //查找第一个进程
  while(theloop)
  {
    procInfo.Format( "进程名:%s     进程ID:%d       父进程ID:%d ",proc.szExeFile,proc.th32ProcessID,proc.th32ParentProcessID);
    ChgString(proc.szExeFile,   ss);//自定义函数,字符转化为小写,你可以用CString的Tolower()一样的.
    if(strcmp(exeName,ss)   ==   0   )
    {
      HANDLE   g_h   =   OpenProcess(PROCESS_ALL_ACCESS,TRUE,proc.th32ProcessID);   //获取进程句柄
//       if(g_h!=NULL)
//         MessageBox( "OK ", "OK ",MB_OK);   //输出提示信息
    }
      theloop   =   Process32Next(snap,&proc);   //查找下一个进程
    i++;
  }
  }


取得执行文件名再:    
    DWORD       GetModuleFileName(    
            HMODULE       hModule,                   //       handle       to       module    
            LPTSTR       lpFilename,           //       file       name       of       module    
            DWORD       nSize                                       //       size       of       buffer    
    );    
     
返回的是带路径的

删除文件用DeleteFile()

说得这么详细,和帮你写出来差不了,你自己再花三五分钟写一下吧. 

回复2:

可以选择Wininit.ini

【原创】探秘Wininit.ini[高手勿进]            
手链魔咒
--------------------------------------------------------------------------------
这篇文章没什么技术性..只是偶尔我遇到点东西.跟不知道的人分享下``我估计大部分都知道这个秘密=   = ¦ ¦

由于一直裸笨..前几天中了个病毒`.手工杀毒.到网上查这个病毒.发现这个病毒用到了Wininit.ini.随后查这个是个什么东西.

百度上是这么说的,大家看下.

        用过Windows   9x的人都见过如下的提示信息:
  Please   wait   while   Setup   updates   your   configuration   files.
  This   may   take   a   few   minutes……
  这是安装完某个软件或者硬件的驱动程序,应安装程序的要求重新启动Windows后的正常现象,绝不会把它与病毒联系起来,本文将用事实告诫你,如果你的机器启动时无缘无故地出现上述信息,就要赶紧去找最新的杀毒软件了!
  这时Windows在干什么呢?实际上它在执行Wininit.ini给出的指令,Wininit.ini是一个鲜为人知的文件,主要用于删除、更名和更新在Windows运行时不能被施以这些操作的文件,它存在的时间很短,所以显得有点神秘。

  Wininit文件工作机
  众所周知,在Windows中,一个可执行文件如果正在运行或某个库文件(*.dll、*.vxd、*.sys等)正在被打开使用,则不能被改写或删除。例如,你不可能在资源管理器中删除/Windows/explorer.exe,而在Windows的GDI界面下,有一些文件一直处于这种状态下,除explorer.exe外,还有显示驱动程序库文件,文件子系统库文件等,如果我们要对这些文件进行升级,改动,就必须在Windows保护模式核心启动前进行,于是Windows就提供了基于Wininit.ini文件的一个机制来完成这个任务,这个机制是,要删除或改写这类文件的应用程序按一定的格式把命令写入   Wininit.ini。Windows在重启时,将在Windows目录下搜索Wininit.ini文件,如果找到,就遵照该文件指令删除、改名、更新文件,完成任务后,将删除Wininit.ini文件本身,继续启动过程。所以Wininit.ini文件中的指令只会被执行一次,列目录时也通常没有它的踪影。
  Wininit.ini文件的格式简述如下:
  Windows   95   Resource   Kit提到Wininit.ini文件有三个可能的段,但只叙述了“rename”段的用法,虽然名为“rename”,却可实现删除、改名、更新文件的功能。其格式为:
  [rename]
  ……
  filename1=filename2
  ……
  行“filename1=filename2”相当于依次执行“copy   filename2   filename1”及“del   filename2”这两个DOS命令。
  启动时,Windows将用filename2覆盖filename1,再删除filename2,这就实现了用filename2与更新filename1的目的,如果filename1不存在,实际结果是将filename2改名为filename1;如果要删除文件,可令filename1为nul,例如:
  [rename]
  ……
  nul=filename2
  ……
  将删除filename2。
  以上文件名都必须包含完整路径,注意:由于Wininit.ini文件的处理是在Windows文件系统调入前,所以不支持长文件名。
  Wininit.ini的应用很多,除了经常在软硬件的安装程序中用到外,还有软硬件的卸载程序中用到,比如:假设你要为自己的软件编写一个卸载程序,这个卸载程序本身是不可能被自己删除的,因为它试图删除自身时,自身却正在运行。为了清除卸载程序本身,你就得借助于Wininit.ini文件。顺便提一句,在安装Windows的最后阶段,就是利用Wininit.ini文件来清除和更名被安装程序SETUP自身使用的文件。

也就是说Wininit.ini是一种windows自带的一种功能.由于一般情况下都很少见到.因为在你的系统文件夹下这个文件是不会存在的.因为在windows启动完成后.这个文件已经被windows自动删除.如果你在你的系统中见到了这个文件夹.那你就要小心了.也许是病毒在搞鬼.

上面删除的用法已经说明的非常详细了.但是我还有点疑问.我继续百度后.发现了这些..

  [RENAME]  
  DIRNUL=C:/SMENU  
  上面的项目会在二次启动后删除C:/SMENU目录和它的下级目录与文件.但是这个项目是危险的,如果是DIRNUL=C:/或DIRNUL=D:/  
  会怎样呢...  

  [DIRNUL]  
  C:/SMENU=1  
  会在二次启动后删除C:/SMENU目录和它的下级目录与文件.

我比较胆小.没敢试试
  [DIRNUL]  
  C:/=1

但是我试了其他的目录.都是不可以实现的.难道是XP下为了保证系统的安全,删除了这个删除文件夹功能的原因??我不得而知了.

但是删除文件是可以的.所以用这个东西写了这个东东^_^.. 
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值