2012-08-08 83 views
0

我遇到了一个奇怪的问题,我的.net c#4.0加载项(一个相对简单的加载项与互操作吨和customtaskpane吨)导致单词崩溃:SEHException在Word VSTO加载项(VS2010/Word2010)

如果加载项运行时间较长(> 5分钟),有时突然出现窗口对话框“单词不再有效”。几秒钟后,打开广告输入错误对话框,我可以看到它显示SEHException。但是,当Windows立即重新启动Word时,我无法仔细查看异常情况。调试器没有帮助,因为它没有中断。

任何想法是什么导致SEHException和我可以看看? Word/VSTO的具体建议是理想的,但也欢迎关于避免和调查SEHException的一般性建议。

感谢 chabun

+0

当我在没有调试器的情况下运行时,我能够在DispatcherUnhandledException事件中捕获异常:堆栈跟踪指向消息泵中的某处并追溯到我的ShowDialog调用。 hresult是0x80004005。任何人都可以在哪里找到HResults? – Chabun 2012-08-08 06:31:22

+0

0x80004005是E_FAIL。也没有帮助... – Chabun 2012-08-08 06:40:26

回答

0

的一种方式,你得到这个例外是,如果非托管代码执行的OS RaiseException()或导致故障。如果该异常被传播到堆栈中,我们将尝试将其映射到托管的异常。例如,STATUS_NO_MEMORY映射到OutOfMemoryExceptionSTATUS_ACCESS_VIOLATION映射到NullReferenceException

对于没有预定义映射的所有例外代码,我们将它们包装到SEHException中。

from What is SEHException?cbrumme:msdn博客


尝试在每一个都可能导致STATUS_NO_MEMORYSTATUS_ACCESS_VIOLATION异常代码添加try{} catch{}块。然后使用ExternalException.ErrorCode获取异常详细信息。

+0

是的,我读过。但是我真正想知道导致异常映射到SEHException的故障原因是什么。任何人都有这种例外?你是如何修复它的? – Chabun 2012-08-08 06:25:47

0

我注意到,编译发布配置时从不发生异常。

如果有人应该经历过相同的尝试释放配置。

+0

只注意到异常发生的时间不像以前那么多,但有时候还是有的( – Chabun 2012-08-13 07:28:23

+0

)有什么可能有助于我们知道的是,我在另一个线程中定期使用一个窗口来显示状态信息(因为工作负载是在ui线程上完成的确保我们正在与word进行正确的交互) – Chabun 2012-08-21 07:09:45

+0

我能够再次捕获异常,现在我还使用EXCEPTIon_POINTERS和Record获取更多信息:异常代码是:0xE0000002,地址是:0x74F2B9BC – Chabun 2012-08-29 11:51:24

相关问题