在未安装 Outlook 客户端的情况下使用 Microsoft.Office.Interop.Outlook

Using Microsoft.Office.Interop.Outlook without Outlook Client installed

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

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 Client。没有它可以使用Microsoft.Office.Interop.Outlook吗?

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

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

安东

I assume it's because Outlook Client is not installed. Is it possible to use Microsoft.Office.Interop.Outlook without it?

Interop 文件用于编组 managed/unmanaged 边界之间的调用。在您的案例中没有无人管理的一面(在哪里编组呼叫)。

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

I don't have Outlook Client installed on a development server.

此外,Microsoft 目前不推荐也不支持从任何无人值守的非交互式客户端应用程序或组件(包括 ASP、ASP.NET、DCOM 和 NT 服务),因为当 Office 在此环境.

中处于 运行 时,Office 可能表现出不稳定的行为 and/or 死锁

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

您可以在 Considerations for server-side Automation of Office 文章中阅读更多相关信息。