相关疑难解决方法(0)

如何处理AccessViolationException

我在我的.net应用程序中使用COM对象(MODI).我调用的方法抛出一个System.AccessViolationException,它被Visual Studio拦截.奇怪的是我在try catch中包含了我的调用,它包含AccessViolationException,COMException和其他所有东西的处理程序,但是当Visual Studio(2010)拦截AccessViolationException时,调试器会中断方法调用(doc.OCR),如果我单步执行,它将继续到下一行,而不是进入catch块.另外,如果我在visual studio外部运行,我的应用程序崩溃了.如何处理COM对象中引发的此异常?

MODI.Document doc = new MODI.Document();
try
{
    doc.Create(sFileName);
    try
    {
        doc.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, false, false);
        sText = doc.Images[0].Layout.Text;
    }
    catch (System.AccessViolationException ex)
    {
        //MODI seems to get access violations for some reason, but is still able to return the OCR text.
        sText = doc.Images[0].Layout.Text;
    }
    catch (System.Runtime.InteropServices.COMException ex)
    {
        //if no text exists, the engine throws an exception.
        sText = "";
    }
    catch
    {
        sText = "";
    }

    if (sText != null)
    {
        sText = sText.Trim();
    } …
Run Code Online (Sandbox Code Playgroud)

.net c# com modi exception

170
推荐指数
3
解决办法
13万
查看次数

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

有没有办法在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兼容的异常.有关详细信息,请查看此处的其他问题.

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 …
Run Code Online (Sandbox Code Playgroud)

c# asp.net error-handling

10
推荐指数
1
解决办法
2947
查看次数

标签 统计

c# ×2

.net ×1

asp.net ×1

com ×1

error-handling ×1

exception ×1

modi ×1