使用未安装Outlook客户端的Microsoft.Office.Interop.Outlook

时间:2015-02-17 09:01:14

标签: c# outlook interop office-interop

我正在尝试枚举 Outlook全局地址列表,并且我没有在开发服务器上安装 Outlook Client 。 我收到了以下错误

An unhandled exception of type 'System.Runtime.InteropServices.COMException' occurred in mscorlib.dll

Additional information: Retrieving the COM class factory for component with CLSID {0006F03A-0000-0000-C000-000000000046} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

在以下一行

Application app = new Microsoft.Office.Interop.Outlook.Application();

我认为这是因为未安装 Outlook客户端。没有它可以使用 Microsoft.Office.Interop.Outlook 吗?

2 个答案:

答案 0 :(得分:2)

安东,

  

我认为是因为没有安装Outlook客户端。没有它可以使用Microsoft.Office.Interop.Outlook吗?

Interop文件用于在托管/非托管边界之间编组调用。在你的案件中没有无人管理的一方(在哪里整理电话)。

如前所述,您可以改用EWS。有关详细信息,请参阅EWS Managed API, EWS, and web services in Exchange

  

我没有在开发服务器上安装Outlook客户端。

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

如果要构建在服务器端上下文中运行的解决方案,则应尝试使用已为安全无人值守执行的组件。或者,您应该尝试找到允许至少部分代码在客户端运行的替代方法。如果从服务器端解决方案使用Office应用程序,则应用程序将缺少许多成功运行的必要功能。此外,您将承担整体解决方案稳定性的风险。

您可以在Considerations for server-side Automation of Office文章中详细了解相关内容。

答案 1 :(得分:1)

如果没有安装相关应用程序,则无法使用Interop程序集。 Interop程序集主要用作高级应用程序自动化系统。

如果您使用的是Exchange Server 2007或更高版本,则可以考虑使用本文中介绍的使用Exchange Web服务(EWS)访问全局地址列表的技术:Querying the Global Address List (GAL) via Exchange Web Services (EWS)