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 服务器端自动化的注意事项。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈