问题描述
我的服务器上平时开着10多个控制台应用程序,都是用来抽取数据接收数据的,因为太多了不好管理,经常有一个挂掉了自己也没发现。现在想做一个可以监视所有应用程序,并且能在这程序上运行这些应用程序,现在只是有这么一个思路,该怎么做大家说说啊,有什么想法建议都可以说。
解决方案
解决方案二:
写个程序看进程?
解决方案三:
每个客户端开启后有个进程,或者你暴漏一个GUID,然后写个监听程序可以试试
解决方案四:
监视进程呗.每个程序的进程名你应该都知道的吧
解决方案五:
可以在webform里写吗
解决方案六:
为什么在webform里,你管理的不是控制台吗你想在其他电脑上看?可以先用winform程序监控进程,有问题写数据库,webform访问数据库
解决方案七:
监视程序会不会挂掉啊
解决方案八:
这个问题我两年前也遇到了,我们服务器上有二三十个控制台程序,远程上去复制(Ctrl+C)个东西,有时候还可能不小心就把控制台给结束掉了,我就自己用winform弄了个管理工具,获取每个控制台程序的句柄,把所有程序都嵌入在一个panel中,这样就可以很方便在管理程序里面看到每个程序的运行情况又不用担心Ctrl+C不小心结束掉某个程序了,然后在管理程序中加个线程每隔多少时间去定时检查程序运行情况,挂了就重启。
解决方案九:
7楼的方法可取,如果是自己开发工具,直接通过工具配置好你要打开的程序,然后一个打开,并做个界面,将这些程序全部嵌入到你的工具里,具体界面自己考虑,需要实现的就是嵌入的代码。可以通过Api或.net句柄装载指定界面///<summary>设置指定句柄对象的父窗体(将句柄对象装入父窗体中)///</summary>///<paramname="hChild">子对象句柄</param>///<paramname="hParent">父窗体句柄</param>///<returns></returns>[DllImport("user32.dll",CharSet=CharSet.Auto)]publicstaticexternIntPtrSetParent(IntPtrhChild,IntPtrhParent);
解决方案十:
给你写一个基于#3楼那样的设计。假设你要守护的程序都写在一个文本文件sc.ini中,是这样的Name1=c:\xxxyyyname1.exeName2=d:\mm.exe
其中,前边的是程序运行起来之后的进程名,后边是需要运行的程序的启动路径。你可以写这样一个console程序用来启动它们usingSystem;usingSystem.Diagnostics;usingSystem.IO;usingSystem.Linq;namespaceConsoleApplication1{classProgram{staticvoidMain(string[]args){varlines=File.ReadAllLines(Path.Combine(AppDomain.CurrentDomain.BaseDirectory,"sc.ini"));varsch=(fromxinlineslets=x.Split('=')wheres.Length==2selectnew{进程名=s[0].Trim(),程序路径=s[1].Trim()}).ToList();sch.ForEach(sc=>{varps=Process.GetProcessesByName(sc.进程名);if(ps.Length==0)Process.Start(sc.程序路径);});}}}
每次运行它,可以检查一遍目标程序启动状况。然后你就可以在你的服务器上创建一个windows计划任务,设置每隔10秒钟执行一次这个程序(这个程序很快,所以可以把间隔时间设置的短一些)。