【问题标题】:Intermittent COM and MAPI errors in native application本机应用程序中的间歇性 COM 和 MAPI 错误
【发布时间】:2021-10-10 05:47:06
【问题描述】:

问题

我们有一个本机应用程序,它通过 COM/interop 与 Outlook 集成。 我们偶尔会遇到与 COM、MAPI、赎回和 Windows 注册表相关的不同错误。这仅适用于单个客户端安装。
它在 95-99% 的时间内有效。这个百分比是通过查看我们的日志文件推断出来的。

我们有很多其他客户端安装,使用相同版本(相同代码)的本机应用程序永远不会出现错误。我们只在这一个客户端安装时遇到错误。

这使我相信问题可能源于客户端安装时的某些不同之处,而不是代码。但这当然只是一个假设。

错误

错误一

HRESULT 异常:0x8002801D (TYPE_E_LIBNOTREGISTERED)
调用时:

var outlookApp = (Application) Marshal.GetActiveObject("Outlook.Application");
var mapiObject = outlookApp.GetNamespace("MAPI").MAPIOBJECT; // <-- This line causes the error

Microsoft.Office.Interop.Outlook.ApplicationClass.GetNamespace(String Type)

错误二

接口未注册(HRESULT 异常:0x80040155)
调用时:

Microsoft.Office.Interop.Outlook._MailItem.get_Attachments()

错误三

MAPILogonEx 中的错误:MAPI_E_LOGON_FAILED
调用时:

Redemption.IRDOSession.Logon(Object ProfileName, Object Password, Object ShowDialog, Object NewSession, Object ParentWindowHandle, Object NoMail)

目前尝试过

  • 从头开始重新安装整个机器
  • 重新安装 Office
  • 维修办公室
  • 检查注册表以查看是否存在多个版本的 Office
    • 只有一个版本 - “9.6”(Microsoft Office Standard 2019)
  • 在 Redemption dll 上运行 regsvr32

信息:

  • Skype/Skype for business 未安装
  • 使用 Exchange Online,而非前提
  • Windows、Outlook 和我们的原生应用程序都是 x64 的

奇怪的是,它在大多数情况下都有效。如果注册(注册表)有问题,我希望它每次都会失败。
看起来这可能是一个 MAPI 问题,但它在大多数情况下仍然有效。

我这几天一直在研究这个问题,但无法找出问题间歇性发生的原因。我发现了很多关于不同错误的信息,但它们似乎都是一致发生的;每次在我发现的错误场景中调用代码时都会发生错误。

有没有人经历过类似的事情或知道为什么会发生这种情况?

【问题讨论】:

  • 如果只是一个客户端安装失败并出现这些错误,请尝试查找其中的具体内容。检查加载到 Outlook.exe 中的 .dll 是什么,尤其是使用 sysinternals 的前 ProcExp 工具的第 3 方 .dll(不是 Microsoft)。还要检查位数(x86 与 x64)。检查磁盘是否损坏、病毒等。多线程和计时/竞争条件也可能导致异常错误。如果您可以重现注册问题,请使用 sysinternals 的 ProcMon 工具来监控当时的注册表访问。
  • @SimonMourier 位数是一样的:Windows、Outlook 和我们的原生应用程序都是 x64 的。我会尝试研究其他的事情。谢谢你:)

标签: c# outlook com mapi outlook-redemption


【解决方案1】:

您的计算机已损坏或存在任何恶意软件。该问题与 Redemption 库无关,因为即使是 Outlook 对象模型也会给出与 COM 互操作性所需的 Windows 注册表项相关的错误。

【讨论】:

    【解决方案2】:

    TYPE_E_LIBNOTREGISTEREDREGDB_E_IIDNOTREG 错误非常强烈地表明某些 COM 注册表项丢失。尝试完全卸载然后重新安装 Outlook(不仅仅是修复)。

    【讨论】:

    • 您知道 MAPI 错误是否是由同一件事引起的,还是我也曾在其他地方寻找导致该错误的原因?
    • 很难说 - MAPI_E_LOGON_FAILED 是一个非常通用的“出现问题”错误。 Outlook 可以同时使用相同的配置文件吗?
    • 是的,Outlook 也可以同时使用相同的配置文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    • 2015-01-24
    • 1970-01-01
    • 2014-09-15
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多