2010-02-27 70 views
8

Estoy intentando crear un programa que abriría un nuevo mensaje de Outlook 2007.Outlook 2007 desde C#: excepción COM, TYPE_E_LIBNOTREGISTERED

He hecho una referencia desde la pestaña COM Microsoft Outlook 12.0 ObjectLibrary.

Estos artículos se presentaron en las referencias en VS:

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

ahora trato de invocar siguiente código:

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

donde OutlookApp == Microsoft.Office.Interop.Outlook espacio de nombres.

Invocando segunda línea de la lista me siguen dando esta excepción: (InvalidCastException)

Unable to cast COM object of type 'Microsoft.Office.Interop.Outlook.ApplicationClass' to interface type 'Microsoft.Office.Interop.Outlook._Application'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{00063001-0000-0000-C000-000000000046}' failed due to the following error: Library unregistered. (Exception from HRESULT: 0x8002801D (TYPE_E_LIBNOTREGISTERED)).

Ese código funcionó bien para Outlook 2003 en mi otra estación.

Estaré agradecido por cualquier idea sobre cómo solucionarlo.

Respuesta

10

Esto también puede suceder cuando desinstala una instalación de office 2013 y vuelve a la oficina 2010. Es posible que queden algunas claves de registro y dlls, lo que hace que la aplicación de Office cargue dll (s) incorrecto (s).

Aquí está la solución: http://www.fieldstonsoftware.com/support/support_gsyncit_2013.shtml

+3

Awesome find - eliminar 'HKEY_CLASSES_ROOT \ TypeLib \ {00062FFF-0000-0000-C000-000000000046} \ 9.5 hizo el truco! Esto es un error con el ** desinstalador de Office 2013 **. – SliverNinja

+1

Buen hallazgo, eso solucionó mi problema +1 – Gabe

+0

Eso no funcionó para mí, ya que no había un campo 9.5 excesivo. En mi caso, el problema fue que cuando me degradaron a Outlook 2010 modifiqué la ubicación de instalación (es decir, no en la carpeta predeterminada Archivos de programa). Sin embargo, Windows no actualizó en consecuencia el valor en 'HKEY_CLASSES_ROOT \ TypeLib \ {00062FFF-0000-0000-C000-000000000046} \ 9.4 \ 0 \ win64' Después de actualizar manualmente el valor y apuntarlo a la ubicación correcta, el problema fue resuelto – Doigen

5

Office no está instalado correctamente en esa máquina. Puede verificar que con Regedit.exe, navegue al HKEY_CLASSES_ROOT\Interface\{00063001-0000-0000-C000-000000000046}\TypeLib para verificar el GUID de la biblioteca de tipos (debe ser {00062FFF-0000-0000-C000-000000000046}), luego a HKEY_CLASSES_ROOT\TypeLib\{00062FFF-0000-0000-C000-000000000046} para verificar que la biblioteca de tipos está correctamente registrada, utilizando el número correcto de la versión de la biblioteca tipo. La última parte debería ser el problema.

Si el equipo de destino ejecuta una versión de Windows de 64 bits, intente configurar Project + Properties, Build, Platform Target en x86.

+0

En Windows x64, aprender sobre Registro de WOW64 (http://support.microsoft.com/kb/896459) –

+0

@nobugz: sobre ese segundo paso: cuando vaya a dicho valor ubicación almacenada allí dice "valor no establecido". ¿es eso un problema? ¿debería establecerse en un valor specyfic? de ser así, qué valor debería haber. En los nodos secundarios de HKEY_CLASSES_ROOT \ TypeLib \ {00062FFF-0000-0000-C000-000000000046} también tienen algunos valores emty. ¿Deberían establecerse? –

+0

Bueno, eso explica por qué no funciona. No tiene idea de lo que sucedió, persiga el ángulo "no instalado correctamente". Tal vez su registro es genial, pruébelo en otra máquina. –

0

tenía el mismo problema con el siguiente código:

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

Sustitución de la primera línea con los siguientes resuelto por mí.

Dim OutlookMessage As Object 

(muestra en VB pero el mismo debe aplicarse a C#)

0

Si intenta tener acceso a Outlook desde Visual Studio y obtener el error:

TF400424: No se pudo enviar a Microsoft Outlook: No se puede convertir el objeto COM del tipo 'Microsoft.Office.Interop.Outlook.ApplicationClass' al tipo de interfaz 'Microsoft.Office.Interop.Outlook._Application'. Esta operación falló porque la llamada QueryInterface en el componente COM para la interfaz con IID '{00063001-0000-0000-C000-000000000046}' falló debido al siguiente error: Biblioteca no registrada. (Excepción de HRESULT: 0x8002801D (TYPE_E_LIBNOTREGISTERED)).

Haga lo siguiente:

  1. Usando el Registro, navegar a: HKEY_CLASSES_ROOT \ TypeLib {00062FFF-0000-0000-C000-000000000046}
  2. Eliminar las claves de versión (por ejemplo, 9,5) para cualquier versión de Outlook que no esté instalada en su sistema según la tabla de versiones que se proporciona a continuación. Por ejemplo, si no está utilizando Outlook 2013, elimine la entrada "9.5". Si no está utilizando Outlook 2010, elimine la entrada "9.4". no elimine la entrada correspondiente a la versión que se configura en Paso # 1

Outlook 2007 ==> 9,3

Outlook 2010 ==> 9,4

de Outlook 2013 ==> 9,5

enter image description here


Referencia: https://support.netdocuments.com/hc/en-us/articles/205219170--Library-Not-Registered-error-when-using-EMS-in-Outlook

Cuestiones relacionadas