C# 保护自动挂掉进程的进程重启

82 篇文章 12 订阅
一个需要长期运行的程序老是自己挂掉,为了让它挂掉后重启,一个简单的方法是写个服务检测它的存在,发现该进程挂掉,则重启该进程。       
 首先新建一个Windows 服务,具体可以参考http://www.cnblogs.com/caca/archive/2005/02/25/109028.html       

然后,overriding onstart() 方法,设置一个timer,用来检测程序进程

[csharp]  view plain copy
  1. protected override void OnStart(string[] args)  
  2.         {  
  3.             System.Timers.Timer t = new System.Timers.Timer();//实例化Timer类  
  4.   
  5.             //int intTime = Convert.ToInt32(cmbTimer.Text.ToString()) * 60 * 60 * 1000;  
  6.             int intTime = 1000 * 10;  
  7.             t.Interval = intTime;//设置间隔时间,为毫秒;  
  8.             t.Elapsed += new System.Timers.ElapsedEventHandler(ThreadMethod);//到达时间的时候执行事件  
  9.             t.AutoReset = true;//设置是执行一次(false)还是一直执行(true);  
  10.             t.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件;  
  11.   
  12.         }  
  13.         public static void ThreadMethod(object source, System.Timers.ElapsedEventArgs e)     
  14.         {  
  15.             startFlowStatics();  
  16.         }   
  17.   
  18.         public static void startFlowStatics()  
  19.   
  20.         {  
  21.             string name = "FlowStatics";  
  22.             int processCount = 1234560;  
  23.             Process[] prc = Process.GetProcesses();  
  24.             foreach (Process pr in prc)  
  25.             {  
  26.                 if (name == pr.ProcessName)  
  27.                 {  
  28.                     processCount = 0;  
  29.                     return;  
  30.                 }  
  31.             }  
  32.   
  33.             if (processCount != 0)  
  34.             {  
  35.                 try  
  36.                 {  
  37.                     Process myProcess = new Process();  
  38.                     myProcess.StartInfo.FileName = "D:\\FlowStatics.exe";//要启动的程序位置  
  39.                     myProcess.StartInfo.Verb = "Open";  
  40.                     myProcess.StartInfo.CreateNoWindow = true;  
  41.                     myProcess.Start();  
  42.                 }  
  43.                 catch (System.Exception ex)  
  44.                 {  
  45.                     //MessageBox.Show(ex.Message + "!!!");  
  46.                 }  
  47.             }  
  48.             else  
  49.             {  
  50.                 //MessageBox.Show("已有该程序运行");  
  51.             }  
  52.         }  
按上面网站的方法,安装服务。之后,你会发现该进程是启动了,但是界面不显示。这是因为服务是以非当前桌面的会话运行的,它运行的程序,当前桌面的人也是看不到的。

查看服务,找到你的服务,属性-->登陆,其中"允许服务与桌面交互"打钩...另外可参考http://www.pin5i.com/showtopic-24076.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值