C# 双保险进程监视器 lol 保证被监视的程序"几乎"永远运行. 关键字:进程操作 进程查看 创建进程
2010-08-31 17:32
645 查看
假设现在有个程序 我希望它一直运行着 几年几十年不去管它。 可是有时候windows总是很梦幻的导致我的程序崩溃退出。所以我决定写一个监视器, 查看当前进程列表 里面如果有这个名字的进程,就sleep一段时间,然后重复监测,如果没有这个进程,则执行这个进程。
但是还有一个问题,假设我的monitor程序也无故崩溃了,那么就没有人监视程序了,所以我又写了一个monitorB,第一个monitor姑且叫monitorA。二者互相监视,一旦任何一个出现崩溃,则运行之。
这有点像流氓软件,或者说auturun病毒。不过没办法,只能这样了。
但是还有一个问题,假设我的monitor程序也无故崩溃了,那么就没有人监视程序了,所以我又写了一个monitorB,第一个monitor姑且叫monitorA。二者互相监视,一旦任何一个出现崩溃,则运行之。
这有点像流氓软件,或者说auturun病毒。不过没办法,只能这样了。
//////////////////////////MonitorB的代码//////////////////////// static class Program { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); //Application.Run(new Form1()); new Thread(CheckAndRunMonitor).Start(); } private static void CheckAndRunMonitor() { while (true) { Process[] thisproc = System.Diagnostics.Process.GetProcessesByName("BadaMovie.MonitorA"); if (thisproc.Length <= 0) { Process process = new Process(); process.StartInfo.FileName = "BadaMovie.MonitorA.exe"; process.StartInfo.WorkingDirectory = ".//"; process.Start(); } Thread.Sleep(10000); } } }
///////////////////////被监视的进程里面要添加一个按钮/////////////////// //////这是为了使用户可以方便的结束这几个monitoir,要么手动结束,会很费劲 private void button1_Click(object sender, EventArgs e) { bool continueFlag = true; uint count = 0; try { while (continueFlag && count < 10) { continueFlag = false; foreach (Process thisproc in System.Diagnostics.Process.GetProcesses()) { if (thisproc.ProcessName == "BadaMovie.MonitorB") { thisproc.Kill(); continueFlag = true; } if (thisproc.ProcessName == "BadaMovie.MonitorA") { thisproc.Kill(); continueFlag = true; } } count++; Thread.Sleep(500); } } catch (Exception ex) { } if (count >= 10) { MessageBox.Show("关闭Monitor进程尝试超过了10次,均未果"); } else { Application.Exit(); } } /////////////////////////这样,用户可以十分方便的结束任务,而不是一个一个的去进程管理器里面关闭
////////////////////////////MonitorA的代码//////////////// static class Program { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); new Thread(CheckAndRunMonitor).Start(); new Thread(CheckAndRunDataCollector).Start(); } private static void CheckAndRunMonitor() { while(true) { Process[] thisproc = System.Diagnostics.Process.GetProcessesByName("BadaMovie.MonitorB"); if (thisproc.Length <= 0) { Process process = new Process(); process.StartInfo.FileName = "BadaMovie.MonitorB.exe"; process.StartInfo.WorkingDirectory = ".//"; process.Start(); } Thread.Sleep(10000); } } private static void CheckAndRunDataCollector() { while(true) { Process[] thisproc = System.Diagnostics.Process.GetProcessesByName("BadaMovie.MovieInfoCollector"); if (thisproc.Length <= 0) { Process process = new Process(); process.StartInfo.FileName = "BadaMovie.MovieInfoCollector.exe"; process.StartInfo.WorkingDirectory = ".//"; process.Start(); } Thread.Sleep(10000); } } }
相关文章推荐
- 以前的某个程序安装在计算机上创建挂起文件操作,运SQL_server卸载了重装,往往是装不了.在安装SQL200的时候有个提示出现“以前的某个程序安装在计算机上创建挂起文件操作,运行安装程序之前必须重新启动计算机”,重起以后同样是这样..是什么原因阿?"后
- SQLServer2000的"以前的某个程序安装已在安装计算机上创建挂起的文件操作。运行安装程序之前必须重新启动计算机"错误
- SQLServer2000的"以前的某个程序安装已在安装计算机上创建挂起的文件操作。运行安装程序之前必须重新启动计算机"错误
- 安装"监视程序运行时间"软件
- 删除"监视程序运行时间"软件
- C# 创建互斥进程(程序只能运行一个实例)
- 安装sqlserver"以前进行的程序安装创建了挂起的文件操作"的解决办法
- "linux ps -mH" 查看进程正在运行的线程
- 关于"以前的某个程序安装已在安装计算机上创建挂起的文件操作"解决办法
- FTP 打开文件夹提示"该文件没有程序与之关联来执行该操作 请在控制面板的文件夹选项中创建关联
- Eclipse编写和调试Applet程序,调试的时候Eclipse会自动调用Java "小程序查看程序",而不用嵌入到网页中查看运行效果。
- 在VS.net(C#)里,设置程序在启动时默认"以管理员身份运行"的方法
- 某个程序安装已在安装计算机上创建挂起的文件操作" 解决办法
- "某个程序安装已在安装计算机上创建挂起的文件操作" 解决办法
- SQL安装错误"以前进行的程序安装创建了挂起的文件操作。运行安装程序之前。必须重新启动计算机"
- MSSQL"以前的某个程序安装已在安装计算机上创建挂起的文件操作
- ls -l |grep "^-"|wc -l 程序问题的定位—strace -p pid(跟踪系统调用)gdb -p pid(调试)lsof -p pid(查看当前进程打开的文件描述符) ps -e
- SQL安装错误"以前进行的程序安装创建了挂起的文件操作。运行安装程序之前。必须重新启动计算机"
- 错误"以前的某个程序安装已在安装计算机上创建挂起的文件操作" 解决办法
- 解决安装sqlServer2000提示 "以前的某个程序安装已经在计算机上创建挂起的文件操作,必须重启计算机"问题