Я работаю на компанию, которая разрабатывает инструмент 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
Взгляните на Redemption Lib Дмитрия, он был разработан именно для этого.
Что ж,
Я уже потратил слишком много времени и сил на этот вопрос, поэтому я думаю, что придумал прагматичный обходной путь для моего конкретного случая - но настоящего решения нет!
Проблема, по-видимому, связана с программами, работающими на разных уровнях целостности (Outlook = средний, VS2010 = admin или высокий). Office по умолчанию работает на среднем уровне, как и мое будущее приложение после развертывания. Так что никаких проблем быть не должно, поскольку, если CRM и Outlook работают на одном уровне, проблем нет.
Для разработки я просто позволяю им работать на высоком или среднем уровне (запускать мои скомпилированные файлы из папки отладки).
В любом другом случае отображается предупреждение Messagebox, информирующее пользователя о различных уровнях целостности, которые вызывают исключение и предотвращают доступ.
На уровне кода, когда я пытаюсь прочитать какие-либо (Outlook) предварительно растворенные, защищенные свойства, и защита объектной модели вызывает исключение, я просто перехватываю его и использую вместо этого значения по умолчанию.
Почему я должен был прочитать их в первую очередь, в настоящее время не понимаю, как и спецификации, которые мне вручили.
В любом случае, спасибо за чтение, и если я когда-нибудь найду решение, я обязательно его запишу - до тех пор имейте в виду, что прагматичное решение лучше, чем никакое!
С Днем отца всех!