Outlook 登录到MAPI配置文件时发生AccessViolationException
我们的应用程序的一部分是一个windows进程,它在后台登录MAPI并为电子邮件编制索引。它适用于许多不同版本的Outlook,几天前还用于Outlook 2016。现在,当登录到MAPI配置文件时,它会出现AccessViolationException 这是异常消息:Outlook 登录到MAPI配置文件时发生AccessViolationException,outlook,ms-office,mapi,outlook-2016,Outlook,Ms Office,Mapi,Outlook 2016,我们的应用程序的一部分是一个windows进程,它在后台登录MAPI并为电子邮件编制索引。它适用于许多不同版本的Outlook,几天前还用于Outlook 2016。现在,当登录到MAPI配置文件时,它会出现AccessViolationException 这是异常消息: Exception thrown at 0x00007FFDA7716BB9 (Mso20win32client.dll) in Tray.exe: 0xC0000005: Access violation writing l
Exception thrown at 0x00007FFDA7716BB9 (Mso20win32client.dll) in Tray.exe: 0xC0000005: Access violation writing location 0x0000000000000000.
我们还没有弄清楚它为什么要访问那个位置。就我们所知,所有的论点都是有效的
调用堆栈如下所示(我们没有Outlook DLL的符号):
有一些帖子讨论了类似的问题,其中一个似乎特别相关,但我们仍然无法确定根本原因或修复方法
有趣的是,为缩小问题范围而创建的峰值(测试程序)并没有显示问题。此外,MFCMAPI是一种可视化MAPI信息的工具,工作良好,即我们能够使用它登录到相同的配置文件
还有谁见过类似的问题吗?关于如何进一步调试有什么想法吗?您正在加载olmapi32.dll。不要这样做-加载msmapi32.dll Dmitry,我们的代码正在使用以下标志调用
MAPILogonEx
:MAPI_EXTENDED | MAPI_UNICODE | MAPI_EXPLICIT_PROFILE | MAPI_BG_SESSION | MAPI_NEW_SESSION
,这将导致上面描述的调用堆栈,在该堆栈中调用将通过MSMAPI32.dll,然后通过OLMAPI32.dll。我们能做些什么不同的事情?而且,直到几天前,这种方法还可以正常工作,没有任何更改。此外,我们正在使用MAPI存根库方法,在我们的项目中使用MapiStubLibrary.cpp
和StubUtils.cpp
,如此处所述:调用MAPILogonEx加载的olmapi32.dll也是如此,还是在动态加载msmapi32.dll和/或调用MAPIInitialize时加载的?似乎是调用MAPIInitialize
加载的olmapi32.dll。此外,还发现了相同的问题。阅读本文之后,我们发现当我们在不同于MAPIInitialize的线程上调用MAPILogonEx时,问题会重新出现。表面上看,这似乎是个问题,但正如我在问题中所说的,这段代码在许多不同版本的Outlook上运行了好几个月,直到最近才开始在Outlook 2016上失败。
Mso20win32client.dll!00007ffda7716bb9() Unknown
OLMAPI32.DLL!00007ffda48e325e() Unknown
OLMAPI32.DLL!00007ffda48274e1() Unknown
OLMAPI32.DLL!00007ffda4827466() Unknown
OLMAPI32.DLL!00007ffda4827408() Unknown
OLMAPI32.DLL!00007ffda4827317() Unknown
CONTAB32.DLL!00007ffdee6a14f6() Unknown
OLMAPI32.DLL!00007ffda482670c() Unknown
OLMAPI32.DLL!00007ffda48261cd() Unknown
OLMAPI32.DLL!00007ffda48253c6() Unknown
OLMAPI32.DLL!00007ffda481653c() Unknown
OLMAPI32.DLL!00007ffda4815dc8() Unknown
MSMAPI32.DLL!00007ffdef225ee6() Unknown
[External Code]