关于System.Diagnostics.Process的高级问题 我用System.Diagnostics.Process启动了另一个test.exe。现在我需要监测test.exe(因为test.exe可能因为未知的原因而挂掉),一旦test.exe出现异常挂掉,我就重起它。目前我不知道该如何监测test.exe,大家帮帮忙啦 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用System.Diagnostics.Process好像没办法 在你的程序 使用多线程一直检测这个程序是否运行///System.Diagnostics.Process[] mProcs= System.Diagnostics.Process.GetProcesses(); foreach(System.Diagnostics.Process sProc in mProcs) { if(sProc.ProcessName=="test.exe") { MessageBox.Show("Yes"); } } 使用多线程 技术的例子http://blog.csdn.net/hertcloud/archive/2007/04/07/1556112.aspx while(pro.HasExited == true){//重启它} 我也遇到这样的问题拉,想判断启动的PROCE是否结束,结束拉再运行另外一个 如果不能用System.Diagnostics.Process这个,麻烦大家给出其它建议啦 while(pro.HasExited == true) { //重启它 } 这个行不通的,这个只能在test.exe正常退出时才能响应。我说的意思是出现异常而挂掉。C#牛人都去哪了啊 Process[] process = Process.GetProcessesByName("test");while(process.Length == 0){//重启它//Sleep} 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#不久达人高手么多多给点指正 WindowsApplication11.exe是一个简单的计算除法的测试程序.想专门捕获除0异常 循环内应加上一句System.Threading.Thread.Sleep(50);休息50毫秒,以免占满CPU Process[] tp = Process.GetProcessesByName("WindowsApplication11.exe");这一句要写在循环内,否则就没有意义了 但是我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发生异常时重起就可以 Process[] tp = Process.GetProcessesByName("WindowsApplication11"); while( tp.Length == 0 ) { p.Start(); System.Threading.Thread.Sleep(50); Process[] tp = Process.GetProcessesByName("WindowsApplication11"); } 进程名即可执行文件名,但不包含.exe 扩展名 目前的现象是这样的,当WindowsApplication11发生异常时,弹出信息框“应用程序中发生了无法处理的异常。如果单击“继续”,应用程序将忽略此错误并尝试继续。如果单击“退出”,应用程序将立即关闭。试图除以零。。”然后信息框由“详细信息”“继续”“退出”三个按钮。viena(维也纳N02) ,您给的解决方法只能在我单击“退出”按钮,WindowsApplication11才能重起。不是我要的效果啊。我是想发生这种异常时,自动就重起,而不是确定那个应用程序退出了才重起。因为那个应用程序如果发生迭代器处理出错时,不一定有人正好在那能发现该程序挂了。 try{Application.Run();}catch{}这样退出后,这个守护进程就有事做了. 这样写过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"); } }} 介绍下C# 条码打印! 请教ListView的用法 我写的一个通过TcpClient同步阻止模式下向服务器发送消息的方法,请各位提一下意见。 c# 启动时问题 多线程跟Socket问题?(工业基础薄弱,没走两步又碰到麻烦了) ^ō^ 寻求(反射).FieldInfo取值的优化方案... 谁帮我看看这段代码哪地方出错了 关于【调用线程必须为 STA,因为许多 UI 组件都需要】的问题 实在不知道怎么改了 贴出代码麻烦大神给改一下吧! 怎么画像vs.net里面设计时FORM的对齐的网点呢。 当剪切板中的数据类型为object时,应该如何获得? 上传图片的代码,是哪错了? XML结点问题
一直检测这个程序是否运行
///
System.Diagnostics.Process[] mProcs=
System.Diagnostics.Process.GetProcesses();
foreach(System.Diagnostics.Process sProc in mProcs)
{
if(sProc.ProcessName=="test.exe")
{
MessageBox.Show("Yes");
}
}
{
//重启它
}
{
//重启它
}
这个行不通的,这个只能在test.exe正常退出时才能响应。
我说的意思是出现异常而挂掉。C#牛人都去哪了啊
while(process.Length == 0)
{
//重启它
//Sleep
}
{
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#不久
达人高手么多多给点指正
是一个简单的计算除法的测试程序.想专门捕获除0异常
System.Threading.Thread.Sleep(50);
休息50毫秒,以免占满CPU
这一句要写在循环内,否则就没有意义了
而且,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发生异常时重起就可以
{
p.Start();
System.Threading.Thread.Sleep(50);
Process[] tp = Process.GetProcessesByName("WindowsApplication11");
}
viena(维也纳N02) ,您给的解决方法只能在我单击“退出”按钮,WindowsApplication11才能重起。不是我要的效果啊。
我是想发生这种异常时,自动就重起,而不是确定那个应用程序退出了才重起。因为那个应用程序如果发生迭代器处理出错时,不一定有人正好在那能发现该程序挂了。
{
Application.Run();
}
catch
{
}这样退出后,这个守护进程就有事做了.
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");
}
}
}