在C#里,用Process.start()方法启动一个进程,启动的是一个vb写的exe程序“P2.exe”这个P2.exe就是一个简单的窗体,有一些简单的操作能不能在自己的C#程序里捕获这个P2.exe运行中出现的问题,比如说程序崩溃,或者程序陷入死循环?暂时就把可能出现的问题限定为这两种吧,崩溃或者死循环。如何监测并捕获这种可能出现的问题?先谢谢各位叻
解决方案 »
- C# socket非阻塞如何实现和java中nio的相似功能
- unicode字符串如何解码?
- 转换日期格式
- 如何知道右键打开时,其父控件是谁,即右风击了哪个控件,因为多个控件用了同一个菜单
- 请问大家怎么限制在一个form中只能打开3个form窗口?
- Microsoft Visual Studio .NET 2003里怎样使用图象工具啊?平时图像工具栏里的按钮都是禁用的!
- 为什么微软提供的MobileIT不能用啊?
- 网站的访问速度
- 100分求如何操作远程http服务器上mdb数据库?
- (江苏省)哪儿有公司要C#程序员
- 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;