Я использую interop, чтобы получить список всех локальных контактов Outlook (код ниже). Все работает отлично, за исключением одного случая: когда у меня нет внешнего вида в течение времени, когда я использую этот код, я получаю сообщение, которое исчезает примерно через 2 секунды. Ящик сообщений спрашивает меня (перевод, таким образом, английская версия, вероятно, немного отличается): "Настройка mailboxxyz-accept Конфигурация сервера для этого веб-сайта?"
Посмотрев сообщение и посмотрев, как настроены локальные настройки, я увидел, что моя компания использует сертификат в Outlook и, как он выглядит, выглядит так:
Что добавляет слой странности, так это то, что использование функций завершается успешно, а окно сообщений появляется через несколько секунд ПОСЛЕ завершения функций, а затем исчезает через 2 секунды.
Microsoft.Office.Interop.Outlook.Application outlookHandler = new Microsoft.Office.Interop.Outlook.Application();
Microsoft.Office.Interop.Outlook.Items outlookItemsCollection;
MAPIFolder folderContacts = (MAPIFolder)outlookHandler.Session.GetDefaultFolder(OlDefaultFolders.olFolderContacts);
outlookItemsCollection = folderContacts.Items;
foreach (var outlookItem in outlookItemsCollection)
{
.....
}
Еще один способ получить это явление: когда Outlook не работает, я могу попытаться запустить его:
Microsoft.Office.Interop.Outlook.Application outlookHandler = new Microsoft.Office.Interop.Outlook.Application();
var mm = outlookHandler.GetNamespace("MAPI");
mm.Logon(Type.Missing, Type.Missing, true, true);
// Same for the second true being false instead.
Когда я делаю этот прогноз, запрашивает сертификат после запроса профиля по умолчанию.
Теперь мой вопрос: есть ли способ предотвратить появление этого всплывающего окна (или сказать, что методы взаимодействия используют сертификат без запроса)?
Я собираюсь предисловие к этому с тем фактом, что это не элегантное решение, оно должно работать.
// check to see if outlook is running
System.Diagnostics.Process[] prcs = System.Diagnostics.Process.GetProcessesByName("outlook");
// if the found prcs length is 0, outlook isn't running
if(prcs.Length == 0)
{
// start outlook
System.Diagnostics.Process.Start("path to outlook");
// wait for outlook to load
// call your interop code
}
else
// outlook was found as an open process
// call your interop code
Это работает вокруг вашей проблемы, а не для решения основной проблемы. Без какого-либо исключения или чего-либо еще трудно попасть на дно.