Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1257880
  • 博文数量: 788
  • 博客积分: 4000
  • 博客等级: 上校
  • 技术积分: 7005
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-19 15:52
文章存档

2017年(81)

2011年(1)

2009年(369)

2008年(337)

分类:

2009-02-03 09:54:27



 
        有没有一种简单的方法,可以监视一个exe文件是否运行或死掉,一但发现  
   
        立即重启此exe程序.改注册表能不能实现???  
   
   
        附上我自己写的一个按时间定时重启exe的源程序,大家研究一下;  
        http://www.sojibar.com/images/upfile/run2006-10-14.rar  
   
        顺便帮我想个更好的方法,谢谢!

采用进程监视方法,创建该EXE进程后,会得到一个关于这个进程信息的结构对象。然后调用GetExitCodeProcess,如果退出码为STILL_ACTIVE表示进程还在运行,反之则进程已经关闭

 
      woshihaoge   感谢!  
   
      是否有点复杂.

一般来说是用进程监视的方法!很多木马或流氓软件都是这么做的!

 
        能不能说具体一点  

 
      woshihaoge   感谢!  
   
      按你的方法,我实现了,不知道碰到程序假死,会不会生效。还没有测试到。  
   
      代码:  
   
      public  
          {   Public   declarations   }  
          SI               :   TStartupInfo;  
          PI               :   TProcessInformation;  
   
      form.show   加入:  
   
      FillChar(SI,sizeof(SI),#0);  
      with   SI   do  
      begin  
          cb:=sizeof(SI);  
          dwFlags:=StartF_UsesTDHandles   or   STARTF_USESHOWWINDOW;  
          lptitle:=nil;//pchar('gxtvodserver');  
          wShowWindow:=SW_Show;  
      end;  
   
      //Application.ProcessMessages;  
      CreateProcess(PChar(exefile),nil,nil,nil,true,IDLE_PRIORITY_CLASS,nil,nil,SI,PI);  
      //MyHandle:=OpenProcess(PROCESS_TERMINATE,   true,   pi.dwProcessId);  
   
      //开始监控  
      Timer1.Enabled:=TRUE;  
   
  procedure   TForm1.Timer1Timer(Sender:   TObject);  
  var  
      ExitCode:DWORD;  
  begin  
   
      //Handle:=OpenProcess(PROCESS_TERMINATE,   true,   PI.dwProcessId);  
      GetExitCodeProcess(PI.hProcess,   ExitCode);  
      if   not(ExitCode=STILL_ACTIVE)   then               //STILL_ACTIVE  
      begin  
          //showmessage('进程已经关闭');  
          Timer1.Enabled   :=   FALSE   ;  
          if   chksetting()   then  
          begin  
              RestartSvr();//start   service  
          end;  
      end;  
   
   
 

不会是做木马吧

哈哈,你写的代码非常正确,给分拉。

其实最最笨的还有一个方法,就是在一个计时器控件事件中,不断用FindWindow函数检测你运行的程序是否存在,如果不存在了,可以用ShellExecute执行。

最后一抢!

 
      FindWindow   不准确,回勿杀进程!

阅读(324) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~