访问 Outlook COM 对象导致错误 0x80080005 CO_E_SERVER_EXEC_FAILURE
Accessing Outlook COM object results in Error 0x80080005 CO_E_SERVER_EXEC_FAILURE
当我的产品尝试通过进程外的 Outlook COM 对象和 Redemption COM 对象访问 Outlook 时,我的一些客户收到此错误。
我了解到,如果我的产品和 Outlook 运行 处于不同的权限级别(例如,Outlook 作为管理,我的产品作为标准用户),则可能会发生此错误。还有其他可能的原因吗?
这是错误调用堆栈:
System.Runtime.InteropServices.COMException (0x80080005):为 CLSID 为 {0006F03A-0000-0000-C000-000000000046} 的组件检索 COM class 工厂失败,原因是以下错误:80080005 服务器执行失败 ( HRESULT 异常:0x80080005 (CO_E_SERVER_EXEC_FAILURE))。
at
System.Runtime.Remoting.RemotingServices.AllocateUninitializedObject(RuntimeType objectType)
at
System.Runtime.Remoting.Activation.ActivationServices.CreateInstance(RuntimeType serverType)
at
System.Runtime.Remoting.Activation.ActivationServices.IsCurrentContextOK(RuntimeType serverType, Object[] props, Boolean bNewObj)
在
System.RuntimeTypeHandle.CreateInstance(RuntimeType 类型,Boolean publicOnly,Boolean noCheck,Boolean& canBeCached,RuntimeMethodHandleInternal& ctor,Boolean& bNeedSecurityCheck)在 System.RuntimeType.CreateInstanceSlow(Boolean publicOnly,Boolean skipCheckThis,Boolean fillCache,StackCrawlMark& stackMark)
在
System.RuntimeType.CreateInstanceDefaultCtor(布尔 publicOnly,布尔 skipCheckThis,布尔 fillCache,StackCrawlMark 和 stackMark)
在
System.Activator.CreateInstance(类型类型,布尔型非公开)
在
System.Activator.CreateInstance(类型类型)
可能是因为 out-of-proc 对象 (Outlook) 崩溃了,您的地址进程中的 COM 代理无法再与其通信,或者是因为安全上下文不同。
您在什么地方尝试自动化 Outlook?
Microsoft 目前不推荐也不支持来自任何无人值守的 non-interactive 客户端应用程序或组件(包括 ASP、ASP.NET、DCOM、和 NT 服务),因为当 Office 在此环境中 运行 时,Office 可能表现出不稳定的行为 and/or 死锁。
如果您要在 server-side 上下文中构建 运行 的解决方案,您应该尝试使用已针对无人值守执行安全设置的组件。或者,您应该尝试找到至少允许部分代码 运行 client-side 的替代方案。如果您使用来自 server-side 解决方案的 Office 应用程序,该应用程序将缺少许多 运行 成功所必需的功能。此外,您将承担整体解决方案稳定性的风险。在 Considerations for server-side Automation of Office 文章中阅读更多相关信息。您可以考虑使用 low-level API(扩展 MAPI)来使用 server-side 而不是 OOM。
您可能还会发现描述类似问题的 When CoCreateInstance returns 0x80080005 (CO_E_SERVER_EXEC_FAILURE) 文章很有帮助。
当我的产品尝试通过进程外的 Outlook COM 对象和 Redemption COM 对象访问 Outlook 时,我的一些客户收到此错误。
我了解到,如果我的产品和 Outlook 运行 处于不同的权限级别(例如,Outlook 作为管理,我的产品作为标准用户),则可能会发生此错误。还有其他可能的原因吗?
这是错误调用堆栈:
System.Runtime.InteropServices.COMException (0x80080005):为 CLSID 为 {0006F03A-0000-0000-C000-000000000046} 的组件检索 COM class 工厂失败,原因是以下错误:80080005 服务器执行失败 ( HRESULT 异常:0x80080005 (CO_E_SERVER_EXEC_FAILURE))。
at
System.Runtime.Remoting.RemotingServices.AllocateUninitializedObject(RuntimeType objectType)
at
System.Runtime.Remoting.Activation.ActivationServices.CreateInstance(RuntimeType serverType)
at
System.Runtime.Remoting.Activation.ActivationServices.IsCurrentContextOK(RuntimeType serverType, Object[] props, Boolean bNewObj)
在
System.RuntimeTypeHandle.CreateInstance(RuntimeType 类型,Boolean publicOnly,Boolean noCheck,Boolean& canBeCached,RuntimeMethodHandleInternal& ctor,Boolean& bNeedSecurityCheck)在 System.RuntimeType.CreateInstanceSlow(Boolean publicOnly,Boolean skipCheckThis,Boolean fillCache,StackCrawlMark& stackMark)
在
System.RuntimeType.CreateInstanceDefaultCtor(布尔 publicOnly,布尔 skipCheckThis,布尔 fillCache,StackCrawlMark 和 stackMark)
在
System.Activator.CreateInstance(类型类型,布尔型非公开)
在
System.Activator.CreateInstance(类型类型)
可能是因为 out-of-proc 对象 (Outlook) 崩溃了,您的地址进程中的 COM 代理无法再与其通信,或者是因为安全上下文不同。
您在什么地方尝试自动化 Outlook?
Microsoft 目前不推荐也不支持来自任何无人值守的 non-interactive 客户端应用程序或组件(包括 ASP、ASP.NET、DCOM、和 NT 服务),因为当 Office 在此环境中 运行 时,Office 可能表现出不稳定的行为 and/or 死锁。
如果您要在 server-side 上下文中构建 运行 的解决方案,您应该尝试使用已针对无人值守执行安全设置的组件。或者,您应该尝试找到至少允许部分代码 运行 client-side 的替代方案。如果您使用来自 server-side 解决方案的 Office 应用程序,该应用程序将缺少许多 运行 成功所必需的功能。此外,您将承担整体解决方案稳定性的风险。在 Considerations for server-side Automation of Office 文章中阅读更多相关信息。您可以考虑使用 low-level API(扩展 MAPI)来使用 server-side 而不是 OOM。
您可能还会发现描述类似问题的 When CoCreateInstance returns 0x80080005 (CO_E_SERVER_EXEC_FAILURE) 文章很有帮助。