处理错误“WebDev.WebServer.Exe 已停止工作”

Posted

技术标签:

【中文标题】处理错误“WebDev.WebServer.Exe 已停止工作”【英文标题】:Handling Error "WebDev.WebServer.Exe has stopped working" 【发布时间】:2012-09-18 15:18:53 【问题描述】:

有没有办法在 ASP.NET 中处理“WebDev.WebServer.Exe 已停止工作”错误并保持页面运行,甚至只运行 WebServer?或者这是一项不可能完成的任务,本质上就像是在询问如何在某人死后挽救他们的生命?

我在 try/catch 块中有导致错误的代码,但这并没有什么不同。我也尝试注册一个新的 UnhandledExceptionEventHandler,但这也不起作用。我的代码如下,以防我做错了什么。

另外需要明确的是,我并不是在寻求有关如何防止错误的帮助;我想知道错误是否以及何时发生,如果我能做些什么来处理它。

更新 1:TestOcx 是一个 VB6 OCX,它将一个字符串的引用传递给一个用Clarion 编写的 DLL。

更新2:根据@JDennis 的回答,我应该澄清catch(Exception ex) 块也没有被输入。如果我从try\catch 块中删除了对OCX 的调用,它仍然无法到达UnhandledException 方法。基本上有两个领域永远不会被执行。

更新 3:来自@AndrewLewis,我尝试添加一个常规的catch 块来捕获任何不符合 CLS 的异常,但这也不起作用。但是,我后来发现,从 .NET 2.0 开始,所有非 CLS 异常都包含在 RuntimeWrappedException 中,因此 catch (Exception) 也会捕获不符合 CLS 的异常。查看this other question here 了解更多信息。

public bool TestMethod()

    AppDomain.CurrentDomain.UnhandledException +=
        new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

    string input = "test";
    string result = "";
    try
    
        TestOcx myCom = new TestOcx();
        result = myCom.PassString(ref input); // <== MAJOR ERROR!
        // do stuff with result...
        return true;
    
    catch (Exception ex)
    
        log.Add("Exception: " + ex.Message); // THIS NEVER GETS CALLED
        return false;
    


private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)

    // THIS NEVER GETS CALLED
    try
    
        Exception ex = (Exception)e.ExceptionObject;
        log.Add("Exception: " + ex.Message);
    
    catch (Exception exc)
    
        log.Add("Fatal Non-UI Error: " + exc.Message);
    

【问题讨论】:

您拔下电视插头,并尝试观看节目。 TestDll 是做什么的,它来自哪里,它是一个什么样的对象?它自己可以正常工作吗? 我刚刚添加了一个更新来解释对象的作用。感谢您的评论。 大胆猜测,但你能把[HandleProcessCorruptedStateExceptions] 属性添加到你的TestMethod 中,看看你能不能抓住Exception?另见How to handle AccessViolationException 愚蠢的提问时间:您是否尝试过在 IIS 中而不是在内置的网络服务器中运行它?你可能会发现出现了真正的异常,甚至根本没有异常。 你确定 // THIS NEVER GETS CALLED 永远不会被调用,或者它只是再次抛出?尝试只写一个字符串而不使用 ex。 【参考方案1】:

您应该尝试捕获不符合 CLS 的异常,以确保没有抛出任何异常(请记住,您不想在生产中执行此操作,请始终保持具体!):

try

    TestOcx myCom = new TestOcx();
    result = myCom.PassString(ref input); // <== MAJOR ERROR!
    // do stuff with result...
    return true;


catch (Exception ex)

    log.Add("Exception: " + ex.Message); // THIS NEVER GETS CALLED
    return false;

catch

   //do something here

【讨论】:

安德鲁说得很好。我明天试试,然后告诉你结果如何。 不幸的是,这不起作用。我仍然收到相同的错误“WebDev.WebServer40.EXE 中发生未处理的 win32 异常”。不过感谢您的建议。 做一些研究,因为 .NET 2.0 所有不符合 CLS 的异常都包含在 RuntimeWrappedException 中,它派生自 Exceptioncatch (Exception) 将捕获符合 CLS 和不符合 CLS 的异常。 添加@DanM评论的链接:msdn.microsoft.com/en-us/library/ms404228.aspx【参考方案2】:

您的代码显示为 //这永远不会被调用

如果您捕获到异常,则不再对其进行处理。这就是它不触发未处理异常事件的原因。

【讨论】:

我明白你在说什么@JDennis,所以我也会在我的问题中澄清一下:catch 块也永远不会进入。它没有到达对日志消息的调用。 试试这个帖子:***.com/questions/12101097/…

以上是关于处理错误“WebDev.WebServer.Exe 已停止工作”的主要内容,如果未能解决你的问题,请参考以下文章

浏览页面时,出现"WebDev.WebServer.exe 遇到问题需要关闭

如何快速启动WebDev.WebServer

我在运行ASP。NET程序时弹出这样的对话框

WCF 服务 SecurityNegotiationException

ASP.NET为啥找不到服务器?

liteos错误处理