2016-11-08 3 views
1

Часть нашего приложения - это процесс Windows, который регистрируется на MAPI и индексирует электронную почту в фоновом режиме. Он хорошо работает со многими различными версиями Outlook, и до нескольких дней назад использовался для работы с Outlook 2016. Теперь он дает исключение AccessViolationException при входе в профиль MAPI.AccessViolationException при входе в профиль MAPI

Это сообщение об исключении:

Exception thrown at 0x00007FFDA7716BB9 (Mso20win32client.dll) in Tray.exe: 0xC0000005: Access violation writing location 0x0000000000000000. 

Мы до сих пор не удалось выяснить, почему он пытается получить доступ к этому местоположение. Насколько мы можем судить, все аргументы верны.

Вызов стека выглядит следующим образом (у нас нет символов для библиотек DLL Outlook):

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] 

Есть несколько сообщений, которые там говорить о подобных вопросах, в частности, один, который представляется актуальным является this one on Experts Exchange, но мы до сих пор не смогли определить основную причину или исправить.

Интересные всплески (тестовые программы), созданные для сужения проблемы, не проявляют этой проблемы. Также MFCMAPI, который является инструментом для визуализации информации MAPI, работает хорошо, то есть мы можем подключиться к тем же профилям, используя его.

С кем-нибудь еще видели подобную проблему? Любые идеи о том, как отлаживать все дальше?

ответ

1

Вы загружаете файл olmapi32.dll. Не делайте этого - загрузите msmapi32.dll.

+0

Дмитрий, наш код вызывает 'MAPILogonEx' со следующими флагами:' MAPI_EXTENDED | MAPI_UNICODE | MAPI_EXPLICIT_PROFILE | MAPI_BG_SESSION | MAPI_NEW_SESSION', и это приводит к описанному выше стеку вызовов, где вызов выполняется через MSMAPI32.dll, а затем в OLMAPI32.dll. Что мы можем сделать по-другому? Также это работало без каких-либо изменений до нескольких дней назад. – floatingfrisbee

+0

Кроме того, мы используем подход библиотеки MAPI Stub, используя «MapiStubLibrary.cpp» и «StubUtils.cpp» в нашем проекте, как описано здесь: https://msdn.microsoft.com/en-us/library/office /cc963763.aspx – floatingfrisbee

+0

Итак, olmapi32.dll загружен вызовом MAPILogonEx или был загружен до того, как вы динамически загрузили msmapi32.dll и/или вызвали MAPIInitialize? –

Смежные вопросы