2015-05-12 2 views
3

Я пишу программу, которая должна открыть Microsoft Outlook и создать почтовый элемент для пользователя, когда он нажимает кнопку. Однако, когда я это делаю, возникает следующая ошибка:Откройте Outlook с теми же учетными данными, что и запущенное приложение

Извлечение фабрики COM-класса для компонента с CLSID {0006F03A-0000-0000-C000-000000000046} не удалось из-за следующей ошибки: 80080005 Выполнение сервера не выполнено (исключение от HRESULT: 0x80080005 (CO_E_SERVER_EXEC_FAILURE)). После изучения этой ошибки я узнал, что моя программа и MS Outlook должны запускаться как администратор или как обычный уровень привилегий.

Итак, вот мой вопрос ... Как открыть MS Outlook с помощью кода C#, используя тот же уровень привилегий, что и моя текущая работающая программа. Мне нужно получить текущий уровень привилегий, а затем открыть Outlook с этим уровнем привилегий. Мне до сих пор не повезло в моих исследованиях. Любая помощь приветствуется!

Вот мой код (в настоящее время) для открытия MS Outlook и как его использовать:

Application outlookApp = new Application(); 

MailItem mailItem = outlookApp.CreateItem(OlItemType.olMailItem); 
mailItem.Subject = "Blah"; 
mailItem.HTMLBody= @"Various HTML stuff"; 

foreach (string documentPath in this.documentPaths) 
{ 
    mailItem.Attachments.Add(documentPath, 1, 1, documentPath); 
} 

mailItem.Display(true); 

Я использую Microsoft.Office.Interop.Outlook. Если Outlook уже работает с администратором. Тогда я не получаю никаких ошибок.

Просьба предложить.

ответ

0

Я использую SimpleMAPI.NET, чтобы открыть стандартное приложение электронной почты и отправить электронное письмо. Я даже настроил его, чтобы открыть конкретное приложение электронной почты, отличное от того, которое настроено в окнах. Отлично работает с MS Outlook и может даже использоваться с другим программным обеспечением электронной почты.

SimpleMAPI.NET можно получить здесь: http://www.codeproject.com/Articles/2048/Simple-MAPI-NET

Если вы считаете этот подход работоспособный для вас, просто оставьте комментарий, и я продлит свой ответ на некоторые примеры кода и мои изменения в SimpleMAPI.NET относительно Outlook (есть некоторые проблемы с исходной версией выше).

Я предлагаю это здесь, потому что моя команда изначально использовала Outlook через COM (как и вы, на данный момент), столкнулась с несколькими проблемами с этим, а затем выбрала мое решение MAPI. Он оказался намного более стабильным и универсальным, если «единственный» хочет отправить электронное письмо через внешнее приложение ...

0

Outlook - это одноэлементный режим, поэтому убедитесь, что он работает на том же уровне доверия, что и ваше приложение должно быть тем, которое его запускает.

  1. Вы можете попытаться сначала убить Outlook (не очень приятно, и пользователь не оценит его), прежде чем перезапустить его из своего приложения.

  2. Вы можете использовать Extended MAPI (C++ или Delphi) или Redemption (он переносит Extended MAPI и может использоваться с любого языка). MAPI загружается в proc, поэтому он будет работать, даже если Outlook уже запущен. Но вы не сможете отображать элементы: outlook.exe - это тот, который заканчивает отображение сообщений, даже если вы используете MAPI, так что вы вернулись туда, где вы начали.

Почему ваше приложение и Outlook работают в разных контекстах безопасности?

+0

Спасибо за ваш комментарий - Dmitry На самом деле пользователь запускает мое приложение в качестве прав администратора, но Outlook работает как admin. поэтому перед этой проблемой. – vishal

+0

Убедиться, что оба запускаются в одном контексте безопасности - это единственный способ ... –