Oli*_*sen 18 outlook add-in exception-handling exception
几个星期以来,我们一直在努力解决一个问题,即少数客户的Outlook插件因未确定的原因而被卸载和禁用."禁用"是指Outlook将以下注册表值从3更改为2,这实际上意味着下次启动时不会加载该插件:
HKEY_LOCAL_MACHINE\Software\Microsoft\Office\Outlook\Addins\[OurAddin.sProgID]\LoadBehavior
没有错误消息,也没有任何异常显示在我们的addin生成自己的日志文件中.
我已经找到以下专门处理LoadBehavior更改问题的页面:http://blogs.msdn.com/vsod/archive/2008/04/22/Troubleshooting-com-add-in-load-failures.aspx
但是,那里提出的任何可能的理由似乎都不适用:
IDTExtensibility2方法中和代码中的任何其他地方都没有未处理的异常.所有代码都包含在try/catch等效项中,并且所有异常输出仅通过OutputDebugString日志文件发送或发送到日志文件中.那么,还有什么可以导致Outlook禁用插件?
更多细节/观察:
OutputDebugString消息放入initialization部分(这是一个Delphi DLL).当插件无法加载时,它们都不会出现.只有极少数客户受此问题影响.我们有数万个安装,我们没有收到任何关于此的报告.
更新:似乎经常(但不总是)在addin被卸载之前记录的最后一件事是文本"OLE错误800A01A8"的异常.该异常被我正在使用的框架(Add-in-Express)中内置的全局异常处理程序捕获,并且看起来并不是源自我自己的代码,而现在每个方法完全包含在其中try..catch.这通常发生在我从Inspector的Activate事件处理程序设置我的CommandBarButtons的可见性之后.
所有受影响机器的共同属性:
还有一点需要注意的是,这可能也很重要(尽管可能没有我想象的那么多):
我们正在使用来自第三方供应商的许可/复制保护模块,该模块将已编译的DLL包装在"shell"中,并且仅在运行时解包.自从我发现即使在我们自己的代码被执行之前,addin被卸载,这一直是我的主要嫌疑人.但是,虽然供应商确认其代码中可能存在未处理的异常,但是由保护shell的特殊调试版本生成的日志文件显示解包过程已成功完成,并且在Outlook卸载插件之前控件已经传回受保护的DLL .因此,无论是什么导致Outlook卸载我们的插件都发生在保护shell初始化完成和我们自己的代码之间.
还有什么想法吗?
我的公司已经忍受了多年来你所看到的同样问题.我们的插件是用于Outlook 2003的VB6 COM插件,它部署在数百台机器上,每天可以循环数百次(如果不是数千次).我们经历了很多装载和卸载循环.
我们得到了一些插件加载但没有连接的一般错误,我们在代码中处理它.(显然不是生产质量)
Dim outlook As outlook.Application
Set outlook = CreateObject("Outlook.Application")
outlook.COMAddIns("MyFancyDancyPlugin").Connect = True
很少,但并不罕见,这不是一个烦恼,我们看到插件达到一个加载的状态,我们可以在"工具>选项>其他>高级选项> Com加载项"中看到它,但我们只是无法连接到这个东西.如果您尝试连接,则不会出现错误,只会切换回断开连接.[相当于在注册表项中切换回2]就我所知,COM对象永远不会被创建.该项目未列在"已禁用"项中.
我们实际上不必重新部署来纠正此错误.通过Com加载项对话框删除对象,然后重新添加它似乎可以解决问题.这仍然不是一个可接受的解决方案,但它确实可以在不重新安装的情况下恢复运行.
- Windows XP Professional,最新的补丁级别
- Outlook 2003 Professional,最新的修补程序级别
- 不同版本的McAfee Virus Scan(虽然禁用它没有效果 - 见上文)
- 用户是本地Administrators组的成员
这似乎很合适,我们不使用McAfee,但病毒扫描程序也不与outlook或com加载项交互.我们也不使用复制保护应用程序.
对不起,我无法提供更多的帮助,但我很想知道这一点.
| 归档时间: | 
 | 
| 查看次数: | 43728 次 | 
| 最近记录: |