访问Outlook COM对象会导致错误0x80080005 CO_E_SERVER_EXEC_FAILURE

时间:2017-02-13 12:22:44

标签: outlook com outlook-redemption

当我的产品尝试通过进程外Outlook COM对象和Redemption COM对象访问Outlook时,我的一些客户收到此错误。

我已经读过如果我的产品和Outlook以不同的权限级别运行(例如,Outlook作为管理,我的产品作为标准用户),则会发生此错误。还有其他可能的原因吗?

这是错误调用堆栈:

System.Runtime.InteropServices.COMException(0x80080005):由于以下错误,检索具有CLSID {0006F03A-0000-0000-C000-000000000046}的组件的COM类工厂失败:80080005服务器执行失败(来自HRESULT的异常: 0x80080005(CO_E_SERVER_EXEC_FAILURE))。

System.Runtime.Remoting.RemotingServices.AllocateUninitializedObject(RuntimeType objectType)

System.Runtime.Remoting.Activation.ActivationServices.CreateInstance(RuntimeType serverType)

System.Runtime.Remoting.Activation.ActivationServices.IsCurrentContextOK(RuntimeType serverType,Object [] props,Boolean bNewObj)

System.RuntimeType.CreateInstanceSlow中的System.RuntimeTypeHandle.CreateInstance(RuntimeType类型,Boolean publicOnly,Boolean noCheck,Boolean& canBeCached,RuntimeMethodHandleInternal& ctor,Boolean& bNeedSecurityCheck)(Boolean publicOnly,Boolean skipCheckThis,Boolean fillCache,StackCrawlMark& stackMark)

System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly,Boolean skipCheckThis,Boolean fillCache,StackCrawlMark& stackMark)

System.Activator.CreateInstance(Type type,Boolean nonPublic)

System.Activator.CreateInstance(类型类型)

2 个答案:

答案 0 :(得分:0)

要么是因为进程外对象(Outlook)崩溃而地址进程中的COM代理无法再与它通信,要么因为安全上下文不同。

答案 1 :(得分:0)

您在哪里尝试自动化Outlook?

Microsoft目前不建议也不支持从任何无人参与的非交互式客户端应用程序或组件(包括ASP,ASP.NET,DCOM和NT服务)自动化Microsoft Office应用程序,因为Office可能会出现不稳定Office在此环境中运行时的行为和/或死锁。

如果要构建在服务器端上下文中运行的解决方案,则应尝试使用已为安全无人值守执行的组件。或者,您应该尝试找到允许至少部分代码在客户端运行的替代方法。如果从服务器端解决方案使用Office应用程序,则应用程序将缺少许多成功运行的必要功能。此外,您将承担整体解决方案稳定性的风险。请在Considerations for server-side Automation of Office文章中详细了解相关内容。您可以考虑使用低级API(扩展MAPI)在服务器端而不是OOM上使用。

另外,您可能会发现描述类似问题的When CoCreateInstance returns 0x80080005 (CO_E_SERVER_EXEC_FAILURE)文章很有帮助。