Я создаю приложение, которое открывает существующие почтовые сообщения в Outlook.Пользователь может или не может уже работать Outlook.Все работает хорошо, если Outlook не работает, но если он уже запущен, я получаю сообщение об ошибке COM (80080005).Похоже, что в Интернете это может произойти, если существующий процесс Outlook работает с более высоким уровнем разрешений, чем приложение, которое пытается с ним связаться.
Есть ли какой-то другой способ попросить Outlook открытьсообщение, или мне просто нужно убедиться, что я сопоставляю уровни разрешений?
Спасибо,
-Патрик
РЕДАКТИРОВАТЬ Добавление кода в исходный вопрос,поскольку переполнение стека не допускает значимого форматирования в комментариях.
Первоначально я делал следующее:
var outlook = new Outlook.Application();
Эта строка работает во всех случаях, кроме случая, когда я запускал Outlook дозапуск моего приложения.В этом случае я получаю вышеупомянутый код ошибки 80080005.
Я изменил это, чтобы сделать его более понятным для COM:
Application outlook;
try
{
outlook = (Application)Marshal.GetActiveObject("Outlook.Application");
}
catch (COMException ex)
{
if (ex.ErrorCode == -2147221021)
outlook = new ApplicationClass();
else
throw;
}
Однако этот код все еще не совсем работает- если Outlook работает, я перехватываю исключение, код ошибки которого 0x800401E3 (MK_E_UNAVAILABLE).Но когда я пытаюсь создать новый объект ApplicationClass, я все равно получаю тот же код ошибки 80080005.
Я также попытался поместить следующее в блок catch вместо строки new ApplicationClass()
, но нет никакой разницыв поведении:
outlook = (Application) Activator.CreateInstance(
Type.GetTypeFromProgID("Outlook.Application"));