【发布时间】: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