Outlook 2007 из C # - исключение COM, TYPE_E_LIBNOTRurable - PullRequest
8 голосов
/ 27 февраля 2010

Я пытаюсь создать программу, которая открывала бы новое сообщение Outlook 2007.

Я ссылаюсь на вкладку COM Microsoft Outlook 12.0 ObjectLibrary.

Эти элементы отображаются в ссылках в VS:

Microsoft.Office.Core
Microsoft.Office.Inerop.Outlook

Теперь я пытаюсь вызвать следующий код:

var _outlookInstance = new Microsoft.Office.Interop.Outlook.Application();
var _message = (OutlookApp.MailItem)_outlookInstance.CreateItem(OutlookApp.OlItemType.olMailItem);

где OutlookApp == Microsoft.Office.Interop.Outlook пространство имен.

При вызове второй строки списка я получаю следующее исключение: (InvalidCastException)

Невозможно привести COM-объект типа 'Microsoft.Office.Interop.Outlook.ApplicationClass' к типу интерфейса 'Microsoft.Office.Interop.Outlook._Application. Эта операция не удалась, потому что QueryInterface вызов на COM компонент для интерфейса с IID '{00063001-0000-0000-C000-000000000046} не удалось из-за следующей ошибки: Библиотека не зарегистрирована. (Исключение из HRESULT: 0x8002801D (TYPE_E_LIBNOTREGISTERED)).

Этот код хорошо работал для Outlook 2003 на моей другой станции.

Буду благодарен за любые идеи, как это решить.

Ответы [ 4 ]

10 голосов
/ 14 сентября 2012

Это также может произойти, если вы удалили установку Office 2013 и вернулись в Office 2010. Могут остаться некоторые ключи реестра и библиотеки DLL, из-за которых офисное приложение загружает неправильные библиотеки DLL.

Вот исправление: http://www.fieldstonsoftware.com/support/support_gsyncit_2013.shtml

5 голосов
/ 27 февраля 2010

Office неправильно установлен на этом компьютере. Вы можете проверить это с помощью Regedit.exe, перейдите к HKEY_CLASSES_ROOT\Interface\{00063001-0000-0000-C000-000000000046}\TypeLib, чтобы проверить GUID библиотеки типов (должно быть {00062FFF-0000-0000-C000-000000000046}), затем к HKEY_CLASSES_ROOT\TypeLib\{00062FFF-0000-0000-C000-000000000046}, чтобы убедиться, что библиотека типов действительно работает зарегистрирован, используя правильный номер версии библиотеки типов. Последняя часть должна быть проблемой.

Если на целевом компьютере установлена ​​64-разрядная версия Windows, попробуйте установить для Project + Properties, Build, Platform Target значение x86.

1 голос
/ 24 января 2017

Если вы пытаетесь получить доступ к Outlook из Visual Studio и получаете сообщение об ошибке:

TF400424: Не удалось отправить в Microsoft Outlook: невозможно преобразовать COM-объект типа «Microsoft.Office.Interop.Outlook.ApplicationClass» в интерфейс типа «Microsoft.Office.Interop.Outlook._Application». Эта операция завершилась неудачно, потому что произошел сбой вызова QueryInterface в компоненте COM для интерфейса с IID '{00063001-0000-0000-C000-000000000046}' из-за следующей ошибки: Библиотека не зарегистрирована. (Исключение из HRESULT: 0x8002801D (TYPE_E_LIBNOTRurable)).

Выполните следующие действия:

  1. Используя реестр, перейдите к: HKEY_CLASSES_ROOT \ TypeLib {00062FFF-0000-0000-C000-000000000046}
  2. Удалите ключи версий (например, 9.5) для любой версии Outlook, которая не установлена ​​в вашей системе, на основе таблицы версий, представленной ниже. Например, если вы не используете Outlook 2013, удалите запись «9.5». Если вы не используете Outlook 2010, удалите запись «9.4». НЕ УДАЛЯТЬ запись для версии, которая была настроена в Шаг # 1

Outlook 2007 ==> 9,3

Outlook 2010 ==> 9,4

Outlook 2013 ==> 9,5

enter image description here


Ссылка: https://support.netdocuments.com/hc/en-us/articles/205219170--Library-Not-Registered-error-when-using-EMS-in-Outlook

0 голосов
/ 15 января 2017

Была такая же проблема со следующим кодом:

Dim OutlookMessage As Outlook.MailItem
Dim AppOutlook As New Outlook.Application
OutlookMessage = AppOutlook.CreateItem(Outlook.OlItemType.olMailItem)

Замена первой строки на следующую решила для меня.

 Dim OutlookMessage As Object

(образец в VB, но то же самое должно применяться к C #)

...