相关疑难解决方法(0)

捕获另一个进程未处理的异常

我想知道我是否可以捕获由我开始使用Process.Start(...)的另一个进程抛出的未处理异常

我知道我可以使用此链接捕获standered错误,但我想要的是捕获通常由.NET环境的Just In Time调试器捕获的错误,该窗口包含以下单词:"发生了未处理的异常在你的应用程序中.如果你继续,应用程序将忽略此错误并尝试继续.如果你单击退出,应用程序将立即关闭...."然后是异常消息,然后是"继续", "退出"按钮.

c# error-handling unhandled-exception launching-application

18
推荐指数
2
解决办法
2万
查看次数

System.Diagnostics.Process.Start奇怪的行为

我正在编写一个应用程序来启动和监视C#中的其他应用程序.我正在使用System.Diagnostics.Process类来启动应用程序,然后使用Process.Responding属性监视应用程序,以每100毫秒轮询一次应用程序的状态.我使用Process.CloseMainWindow来停止应用程序或Process.Kill如果它没有响应就杀死它.

我注意到一种奇怪的行为,有时进程对象进入一种状态,即当底层进程在循环中挂起并且它不响应CloseMainWindow时,响应属性总是返回true.

重现它的一种方法是在启动流程实例后立即轮询Responding属性.所以举个例子

_process.Start();
bool responding = _process.Responding;
Run Code Online (Sandbox Code Playgroud)

将重现错误状态

_process.Start();
Thread.Sleep(1000);
bool responding = _process.Responding;
Run Code Online (Sandbox Code Playgroud)

将工作.将睡眠周期减少到500将再次引入错误状态.

启动后调用_process.Responding太快的东西似乎阻止了对象获取正确的Windows消息队列处理程序.我想我需要等待_process.Start完成它的异步工作.有没有比调用Thread.Sleep更好的方法来等待这个?我不太自信1000毫秒总是足够的.

.net c# asynchronous

8
推荐指数
1
解决办法
3948
查看次数

检测.NET中的进程崩溃

有没有办法确定我的程序启动的进程已崩溃?目前,我发现的解决方案是查看Process.ExitCode和检查值:

        this.STProcess = Process.Start(this.CreateProcessStartInfo());
        this.STProcess.WaitForExit();
        if (STProcess.ExitCode != 0)
        {
            //raise error event...
        }
Run Code Online (Sandbox Code Playgroud)

我想知道是否有更优雅(和准确)的方式来做到这一点?

我更喜欢C#中的答案,并且使用P/Invoke也很好.

PS - 我需要在Windows XP/Vista/7上工作

c# windows

6
推荐指数
1
解决办法
9357
查看次数