Как предварительно заполнить Outlook MailItem и предотвращение com Исключения из защиты объектной модели

Я работаю на компанию, которая разрабатывает инструмент CRM и предлагает интеграцию с MS Office (2003 и 2007) от Windows XP до 7. (Я работаю с помощью Win7),

Моя задача состоит в том, чтобы назвать экземпляр Outlook (использующий C#) от этого инструмента CRM, когда пользователь хочет послать электронное письмо и предварительно заполнить с данными инструмента CRM (электронная почта, получатель, и т.д.)

Все это уже работает просто великолепно.

Проблема, которую я имею, состоит в том, что "защита объектной модели Outlook" выдает com Исключение

(Операция прерывается (Исключение из HRESULT: 0x80004004 (E_ABORT)))

момент я пытаюсь считать защищенное значение из mailItem (такого как mail.bodyHTML).

Отрывок в качестве примера:

using MSOutlook = Microsoft.Office.Interop.Outlook;

//untrusted Instance
 _outlook = new MSOutlook.Application();

 MSOutlook.MailItem mail = (MSOutlook.MailItem)_outlook.CreateItem(MSOutlook.OlItemType.olMailItem);

 //this where the Exception occurs
 string outlookStdHTMLBody = mail.HTMLBody;

Я сделал довольно мало чтения и знаю, что мой Экземпляр Outlook (полученный при помощи нового Приложения) считают недоверяемым, и поэтому "omg" умирает.

У меня действительно есть обходное решение для разработки:

Я выполняю VS2010 как Администратор и если я выполняю Outlook как Администратор также - все хорошо. Я предполагаю, что это происходит из-за них имеющий те же уровни целостности (высоко), и контроль учётных записей(?) не жалуется. Но это просто не способ пойти для развертывания.

Теперь вопрос:

Существует ли способ получить доверяемый экземпляр Outlook так, чтобы я мог избежать этого исключения?

Я уже считал, что при разработке Дополнения Office с помощью VSTO можно получить доверяемый Экземпляр из события OnComplete и/или использующий "ThisAddin"

Но я "просто" хочу запустить экземпляр перспективы и preopulate это, и не хочу разрабатывать Дополнение, так как это не требование.

И прояснить - у меня нет проблемы со всплывающими окнами, сообщающими пользователю, что к перспективе получают доступ - я просто хочу избавиться от исключения!

Таким образом, как я могу обойти эту проблему с помощью кода?

Любая справка высоко ценится!

Thomas

1
задан torrente 11 May 2010 в 14:20
поделиться

2 ответа

Взгляните на Redemption Lib Дмитрия, он был разработан именно для этого.

2
ответ дан 3 September 2019 в 00:40
поделиться

Что ж,

Я уже потратил слишком много времени и сил на этот вопрос, поэтому я думаю, что придумал прагматичный обходной путь для моего конкретного случая - но настоящего решения нет!

Проблема, по-видимому, связана с программами, работающими на разных уровнях целостности (Outlook = средний, VS2010 = admin или высокий). Office по умолчанию работает на среднем уровне, как и мое будущее приложение после развертывания. Так что никаких проблем быть не должно, поскольку, если CRM и Outlook работают на одном уровне, проблем нет.

Для разработки я просто позволяю им работать на высоком или среднем уровне (запускать мои скомпилированные файлы из папки отладки).

В любом другом случае отображается предупреждение Messagebox, информирующее пользователя о различных уровнях целостности, которые вызывают исключение и предотвращают доступ.

На уровне кода, когда я пытаюсь прочитать какие-либо (Outlook) предварительно растворенные, защищенные свойства, и защита объектной модели вызывает исключение, я просто перехватываю его и использую вместо этого значения по умолчанию.

Почему я должен был прочитать их в первую очередь, в настоящее время не понимаю, как и спецификации, которые мне вручили.

В любом случае, спасибо за чтение, и если я когда-нибудь найду решение, я обязательно его запишу - до тех пор имейте в виду, что прагматичное решение лучше, чем никакое!

С Днем отца всех!

0
ответ дан 3 September 2019 в 00:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: