Катастрофический сбой, за которым следует MAPI_E_INTERFACE_NOT_SUPPORTED при попытке AddPstStore

Я пытаюсь добавить магазин pst из надстройки Outlook, используя Redemption с кодом:

RdoSession = Redemption.RedemptionLoader.new_RDOSession();
RdoSession.MAPIOBJECT = (AddinModule.CurrentInstance as AddinModule).OutlookApp.Session.MAPIOBJECT;
string path = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + @"\Microsoft\Outlook\mystore.pst";
RDOStores stores = RdoSession.Stores;
RDOStore store = stores.AddPSTStore(path, Outlook.OlStoreType.olStoreDefault, "test");

Строка store.AddPstStore выдает System.Runtime.InteropServices.COMException (0x8000FFFF): Catastrophic failure и создает mystore.pst в правильном месте размером 265 КБ. Новый файл хранилища / данных не отображается в Outlook и не отображается в RdoSession.Stores при следующем выполнении. Итак, моя программа пытается создать его снова (так как она его не нашла), а затем та же строка вылетает с:

System.InvalidCastException: Error in IMsgServiceAdmin::AdminProviders: MAPI_E_INTERFACE_NOT_SUPPORTED

Использование офисного кода PIA работает без проблем: https://msdn.microsoft.com/en-us/library/office/bb612380.aspx

Я бы сохранил код погашения, поскольку в нем гораздо больше логики. Я просто переместил эти 5 строк в начало функции, чтобы изолировать проблему.


person Velja Radenkovic    schedule 23.06.2015    source источник
comment
Похоже, это известная проблема с погашением: groups.yahoo.com / neo / groups / Outlook-Redemption / беседы /   -  person Velja Radenkovic    schedule 23.06.2015
comment
Зачем вам нужно использовать Redemption, если объектная модель Outlook работает как шарм?   -  person Eugene Astafiev    schedule 23.06.2015
comment
Я ответил на это в своем вопросе. У меня уже есть жирный кусок кода вокруг RDOStores, поэтому я попытался с ним поработать. В конце я переделал его для использования OOM.   -  person Velja Radenkovic    schedule 24.06.2015


Ответы (1)


MAPI имеет несколько ошибок маршалинга в интерфейсах управления профилями (например, IMsgServiceAdmin).

Попробуйте заменить установку свойства RDOSession.MAPIOBJECT на callimg RDOSession.Logon.

Вы код работаете в надстройке Outlook или в отдельном приложении?

person Dmitry Streblechenko    schedule 23.06.2015
comment
Спасибо, Дмитрий. Это надстройка. Я реорганизовал код для использования объектной модели Outlook. Я переименовываю магазин с помощью RDOStore, и он работает без проблем. Во время игры я заметил еще одну вещь: RDOPstStore.PstPath также не работает с аналогичным сообщением об ошибке. Я попробую использовать логин вместо установки объекта MAPI утром, просто чтобы посмотреть, работает ли он. Должно быть несколько моментов, чтобы проверить. - person Velja Radenkovic; 24.06.2015
comment
Если это надстройка COM, установка RDOSession.MAPIOBJECT должна подойти, пока ваш код работает в основном потоке. Интерфейсы профилей не любят вторичные потоки. - person Dmitry Streblechenko; 24.06.2015