Outlook 2007 加载项异常处理

Posted

技术标签:

【中文标题】Outlook 2007 加载项异常处理【英文标题】:Outlook 2007 Add-in Exception Handling 【发布时间】:2011-02-17 00:31:25 【问题描述】:

我有一个我最近继承的 Outlook 2007 加载项,目前在生产中存在一个问题,即某些用户会定期且看似随机地禁用他们的加载项。外接程序没有日志,并且在每个方法/事件调用到外接程序代码时都有 try/catch(和吃)块。我做了一些谷歌搜索,发现如果有未处理的异常抛出到 Outlook,Outlook 会“软禁用”加载项。

据我所知,加载项没有抛出异常。我想做的是 1) 在插件中创建某种全局异常处理程序,以 100% 确保所有异常都被捕获。或者 2) 以某种方式侦听 Outlook“禁用”注册表中的加载项并让此侦听器删除 Outlook 正在设置的 reg 键。

我试图通过以下方式做到 #1:

AppDomain.CurrentDomain.UnhandledException += AppDomain_UnhandledException;
System.Windows.Forms.Application.ThreadException += Application_ThreadException;

但都没有成功。

我意识到 System.Windows.Forms.Application.ThreadException 不一定适用于 Outlook 加载项,但我想为什么不尝试一下。

另外,我读到 Outlook 为加载项启动了一个单独的 AppDomain,所以我希望 AppDomain.CurrentDomain 可以为此工作。我编写了一些故意抛出异常的代码来测试并且无法进入这些事件中的任何一个,并且 Outlook 继续禁用加载项。

任何帮助/见解将不胜感激。

【问题讨论】:

【参考方案1】:

当 Outlook 插件被禁用时,它会将加载行为从 3 更改为 2。您可以从注册表中检查此加载行为以确定插件是否被禁用。

【讨论】:

@kapilg 我认为这是有价值的信息,所以我给了它一个 +1,但我正在寻找一种方法来防止任何未处理的异常冒泡并首先从内部被禁用我的插件。谢谢。

以上是关于Outlook 2007 加载项异常处理的主要内容,如果未能解决你的问题,请参考以下文章

来自 C# 的 Outlook 2007 - COM 异常,TYPE_E_LIBNOTREGISTERED

Outlook 2007 加载项:在我的表单区域 (WinForm) 重用内置的“收件人...”控件

未处理的异常: 未能加载文件或程序集

Outlook 2003 加载项无法加载,但可以正常工作

outlook2007,开发的vsto插件,安装到客户机提示:未加载。加载COM加载项时出现运行错误

SSCE 4 无法从 Outlook 插件加载本机组件异常