Outlook 对象模型不适合在 Windows 服务中运行

原始 KB 编号:   237913

摘要

Outlook 对象模型 (OOM) 不适用于设计为作为 Windows 服务应用程序运行或由 Windows 服务应用程序生成的应用程序。 这包括在 Internet Information Service (IIS) 下运行的 Active Server Page (AS) P) 应用程序,以及与 AT 计划程序或任务计划程序服务一起运行的应用程序。

OOM 是 Outlook 的自动化模型,设计用于在登录用户会话中运行,用户可以在会话中响应对话框。

这是 Outlook 的设计限制。

更多信息

OOM 有四个主要限制,不适合在 Windows 服务应用程序中使用,如下所示:

  • MAPI 在注册表的配置单元下存储 HKEY_CURRENT_USER 每个用户的配置文件。 当 Windows 服务应用程序运行时,不会加载此注册表配置单元。 此特定问题可能具有欺骗性,因为在开发周期中,开发人员以交互方式登录到系统。 这将导致加载 HKEY_CURRENT_USER 配置单元,以便一切正常进行。 在未以交互方式登录的配置文件的所有者的情况下测试服务后,该服务将无法找到该配置文件。

  • 对于导出 Outlook 对象 (应用程序,只有一) Outlook 对象模型实例可以使用单个配置文件在一个用户上下文中一次运行。 如果同一用户尝试使用第二个配置文件登录,则此尝试将用户加入现有 Outlook 会话。 如果用户尝试从其他用户上下文中启动 Outlook (OOM) ,则尝试将失败。 例如,如果应用程序模拟其他用户(如 Windows 服务应用程序),则尝试将失败。 此失败具有不可预知的结果,如模式对话框或导致 Outlook 停止响应系统的应用程序错误。

  • OOM 始终在登录期间启动 MAPI 后台处理程序。 作为 Windows 服务应用程序运行的 MAPI 客户端应用程序在登录 MAPI 子系统时必须遵循多个限制。 由于 Outlook 不是设计为作为 Windows 服务应用程序运行,因此不遵循这些约定。

    有关详细信息,请参阅 Windows 服务应用程序简介

  • 某些使用 OOM 的操作将引发无法阻止且需要用户干预的模式对话框。 这可能会导致应用程序似乎挂起。

我们建议你在 Windows 服务应用程序中使用扩展 MAPI 代码,而不是 OOM。 如果代码不必直接与 Outlook 一起运行,而是可以针对 Exchange 中的邮箱运行,则应考虑使用 Exchange API,如 Graph、Exchange REST 和 Exchange Web 服务 (EWS) 。

参考

有关详细信息,请参阅 Considerations for server-side automation of Office