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

原始 KB 编号: 237913

摘要

Outlook 对象模型 (OOM) 不适合从设计为作为 Windows 服务应用程序运行或由 Windows 服务应用程序生成的应用程序使用。 这包括在 Internet Information Service (IIS) 下运行的 Active Server Page (ASP) 应用程序,以及与 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 Services (EWS) 。

参考

有关详细信息,请参阅 Office 服务器端自动化的注意事项