捕获进程异常 在C#里,用Process.start()方法启动一个进程,启动的是一个vb写的exe程序“P2.exe”这个P2.exe就是一个简单的窗体,有一些简单的操作能不能在自己的C#程序里捕获这个P2.exe运行中出现的问题,比如说程序崩溃,或者程序陷入死循环?暂时就把可能出现的问题限定为这两种吧,崩溃或者死循环。如何监测并捕获这种可能出现的问题?先谢谢各位叻 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 程序陷入死循环 先别说 你能不能判断其他程序的... 就是连你原项目是否死循环 你都无法判定啊.因为:死循环是一种开发技巧,死循环并非BUG,甚至于不能算糟糕的编码.如果VB程序崩溃,你要判断这个的话还是有得实现.就是定时检查你启动的这个进程 有没有消失. "程序崩溃,或者程序陷入死循环"1.程序崩溃异常处理或者忽略错误 on error resume next2.程序陷入死循环该打屁股,这类问题,请修改代码解决。不要头痛医脚。 直接的方法没有,可以试试通过第三方软件运行过程中的一些状态推断程序崩溃,或陷入死循环。需要取得相关信息:程序崩溃时会出现的现象,如弹出的出错窗口。 陷入死循环时,超过多长时间,窗面信息不变,预期的界面上的信息变化(WM_GETTEXT)。方法主要是 WINAPI .[DllImport("user32.dll", EntryPoint = "FindWindow")]private extern static IntPtr FindWindow(string lpClassName, string lpWindowName);[DllImport("user32.dll")]static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);[DllImport("user32.dll")]private static extern bool SetForegroundWindow(IntPtr hWnd);[DllImport("User32.dll", EntryPoint = "SendMessage")]private static extern int SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, string lParam);const int WM_GETTEXT = 0x000D;const int WM_SETTEXT = 0x000C;const int WM_CLICK = 0x00F5; 应该是可以的。我记得以前有个API可以捕捉进程的退出代码。 哦,那现在我的思路是:因为本来有这个vb程序窗体的句柄(叫hWnd吧),通过判断这个窗体是否存在来判断程序是否已经退出,如何根据这个hWnd来判断他所指向的窗体还是否存在呢?? 可以在定时器中FindWindow寻找你想找的窗体,如果句柄(叫hWnd吧)不为0就表示窗体还存在,如果为0就表示不存在了.也可以使用Process类,多利用Process类中的一些属性 ProcessStartInfo pi = new ProcessStartInfo(); pi.FileName = "cmd.exe"; Process pc = Process.Start(pi); // 获取指示关联进程是否已终止的值。 bool exited = pc.HasExited; // 获取指示进程的用户界面当前是否响应的值。 bool Responding = pc.Responding; c# listview的问题 datagrid 怎么给模板列中的下拉框赋值 C#面试题,请大侠帮忙看看!! 怎么显示Metafile类型的文件 类似于wmf 高手看过来,如何在一个WinForm程序窗口中,显示本地的htm文件 问一个很菜的问题 如何动态修改后缀名为.xsd的数据集的链接字符串 业务逻辑层怎样处理冗余代码比较好 能否在datagrid中加个自动增长的序号字段 如何保持richtextbox中总是显示最新的内容? C#屏幕旋转ChangeDisplaySettings无效? IL语言是由所有.NET语言最小的共同部分组成?!
1.程序崩溃
异常处理或者忽略错误 on error resume next
2.程序陷入死循环
该打屁股,这类问题,请修改代码解决。不要头痛医脚。
直接的方法没有,可以试试通过第三方软件运行过程中的一些状态推断程序崩溃,或陷入死循环。需要取得相关信息:程序崩溃时会出现的现象,如弹出的出错窗口。 陷入死循环时,超过多长时间,窗面信息不变,预期的界面上的信息变化(WM_GETTEXT)。方法主要是 WINAPI .[DllImport("user32.dll", EntryPoint = "FindWindow")]
private extern static IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll")]
static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
[DllImport("user32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);[DllImport("User32.dll", EntryPoint = "SendMessage")]
private static extern int SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, string lParam);const int WM_GETTEXT = 0x000D;
const int WM_SETTEXT = 0x000C;
const int WM_CLICK = 0x00F5;
哦,那现在我的思路是:
因为本来有这个vb程序窗体的句柄(叫hWnd吧),通过判断这个窗体是否存在来判断程序是否已经退出,如何根据这个hWnd来判断他所指向的窗体还是否存在呢??
ProcessStartInfo pi = new ProcessStartInfo();
pi.FileName = "cmd.exe";
Process pc = Process.Start(pi);
// 获取指示关联进程是否已终止的值。
bool exited = pc.HasExited;
// 获取指示进程的用户界面当前是否响应的值。
bool Responding = pc.Responding;