delphi2007 教程

delphi2007 教程

首页 新随笔 联系 聚合 管理
  1013 Posts :: 0 Stories :: 28 Comments :: 0 Trackbacks
特殊功能,实现方法! Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061118141925203.html
 
        有没有一种简单的方法,可以监视一个exe文件是否运行或死掉,一但发现  
   
        立即重启此exe程序.改注册表能不能实现???  
   
   
        附上我自己写的一个按时间定时重启exe的源程序,大家研究一下;  
        http://www.sojibar.com/images/upfile/run2006-10-14.rar  
   
        顺便帮我想个更好的方法,谢谢!

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

 
      woshihaoge   感谢!  
   
      是否有点复杂.

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

 
      <b>   能不能说具体一点   </b>

 
      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   不准确,回勿杀进程!

posted on 2009-02-03 09:52 delphi2007 阅读(214) 评论(0)  编辑 收藏 引用
只有注册用户登录后才能发表评论。