我用System.Diagnostics.Process启动了另一个test.exe。现在我需要监测test.exe(因为test.exe可能因为未知的原因而挂掉),一旦test.exe出现异常挂掉,我就重起它。目前我不知道该如何监测test.exe,大家帮帮忙啦

解决方案 »

  1.   

    用System.Diagnostics.Process好像没办法
      

  2.   

    在你的程序 使用多线程
    一直检测这个程序是否运行
    ///
    System.Diagnostics.Process[]   mProcs=   
      System.Diagnostics.Process.GetProcesses();   
      foreach(System.Diagnostics.Process   sProc   in   mProcs)   
      {   
      if(sProc.ProcessName=="test.exe")   
      {   
      MessageBox.Show("Yes");     
      }   
      }
      

  3.   

    使用多线程 技术的例子http://blog.csdn.net/hertcloud/archive/2007/04/07/1556112.aspx
      

  4.   

    while(pro.HasExited == true)
    {
    //重启它
    }
      

  5.   

    我也遇到这样的问题拉,想判断启动的PROCE是否结束,结束拉再运行另外一个
      

  6.   

    如果不能用System.Diagnostics.Process这个,麻烦大家给出其它建议啦
      

  7.   

    while(pro.HasExited  ==  true)  
    {  
    //重启它  

    这个行不通的,这个只能在test.exe正常退出时才能响应。
    我说的意思是出现异常而挂掉。C#牛人都去哪了啊
      

  8.   

    Process[] process = Process.GetProcessesByName("test");
    while(process.Length == 0)
    {
    //重启它
    //Sleep
    }
      

  9.   

    namespace WindowsApplication10
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();            System.Diagnostics.Process p = new Process();
                p.StartInfo.FileName = "D:\\studytest\\WindowsApplication10\\WindowsApplication11.exe";
                p.StartInfo.Arguments = "";//设置参数
                p.StartInfo.CreateNoWindow = true;
                p.Start();            Process[] tp = Process.GetProcessesByName("WindowsApplication11.exe");            while( tp.Length == 0 )
                {
                    p.Start();
                }
            }
        }
    }
    我是这样写的
    死循环的
    小弟刚刚涉足C#不久
    达人高手么多多给点指正
      

  10.   

    WindowsApplication11.exe
    是一个简单的计算除法的测试程序.想专门捕获除0异常
      

  11.   

    循环内应加上一句
    System.Threading.Thread.Sleep(50);
    休息50毫秒,以免占满CPU
      

  12.   

    Process[] tp = Process.GetProcessesByName("WindowsApplication11.exe");
    这一句要写在循环内,否则就没有意义了
      

  13.   

    但是我debug时,一开始就进入到while循环当中了。
    而且,WindowsApplication11.exe它并没有发生异常,依然进行循环。
    给我启动了六个,哈
    程序如下:
    namespace WindowsApplication10
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();            System.Diagnostics.Process p = new Process();
                p.StartInfo.FileName = "D:\\studytest\\WindowsApplication10\\WindowsApplication11.exe";
                p.StartInfo.Arguments = "";//设置参数
                p.StartInfo.CreateNoWindow = true;
                p.Start();            Process[] tp = Process.GetProcessesByName("WindowsApplication11.exe");            int i = 0;
                while( tp.Length == 0 )
                {
                    if (++i > 5)
                        break;
                     p.Start();
                     System.Threading.Thread.Sleep(50);
                }
            }
        }
    }我只想在WindowsApplication11.exe发生异常时重起就可以
      

  14.   

    Process[] tp = Process.GetProcessesByName("WindowsApplication11");            while( tp.Length == 0 )
                {
                     p.Start();
                     System.Threading.Thread.Sleep(50);
                     Process[] tp = Process.GetProcessesByName("WindowsApplication11");
                }
      

  15.   

    进程名即可执行文件名,但不包含.exe 扩展名
      

  16.   

    目前的现象是这样的,当WindowsApplication11发生异常时,弹出信息框“应用程序中发生了无法处理的异常。如果单击“继续”,应用程序将忽略此错误并尝试继续。如果单击“退出”,应用程序将立即关闭。试图除以零。。”然后信息框由“详细信息”“继续”“退出”三个按钮。
    viena(维也纳N02) ,您给的解决方法只能在我单击“退出”按钮,WindowsApplication11才能重起。不是我要的效果啊。
    我是想发生这种异常时,自动就重起,而不是确定那个应用程序退出了才重起。因为那个应用程序如果发生迭代器处理出错时,不一定有人正好在那能发现该程序挂了。
      

  17.   

    try
    {
    Application.Run();
    }
    catch
    {
    }这样退出后,这个守护进程就有事做了.
      

  18.   

    这样写过
    try
    {
        Process.Start("test.exe");
    }
    catch
    {
        Process.Start("test.exe");
    }
    //以上为强制启动部分代码
    Thread th=new ThreadStart(Test);
    th.Start();
    public void Test()
    {
       while(1)
       {
         int i=0;
         System.Diagnostics.Process[]mProcs=System.Diagnostics.Process.GetProcesses();   
         foreach(System.Diagnostics.Process   sProc   in   mProcs)   
         {   
            if(sProc.ProcessName=="test.exe")   
           {   
              i++;     
           }   
         }
          if (i==0)
          {
             Process.Start("test.exe");
          }
       }
    }