来自C#的Outlook 2007 – COMexception,TYPE_E_LIBNOTREGISTERED

我正在尝试制作一个可以打开新的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命名空间。

在调用第二行列表时,我不断收到此exception:( InvalidCastException)

无法将“Microsoft.Office.Interop.Outlook.ApplicationClass”类型的COM对象强制转换为接口类型“Microsoft.Office.Interop.Outlook._Application”。 此操作失败,因为由于以下错误,对IID为“{00063001-0000-0000-C000-000000000046}”的接口的COM组件的QueryInterface调用失败:库未注册。 (HRESULT的例外情况:0x8002801D(TYPE_E_LIBNOTREGISTERED))。

该代码在我的其他工作站上适用于Outlook 2003。

我会很感激任何想法如何解决它。

当您卸载Office 2013安装并返回office 2010时,也会发生这种情况。可能还有一些注册表项和dll,这会导致office应用程序加载错误的dll。

以下是修复: http : //www.fieldstonsoftware.com/support/support_gsyncit_2013.shtml

Office未在该计算机上正确安装。 您可以使用Regedit.exevalidation,导航到HKEY_CLASSES_ROOT\Interface\{00063001-0000-0000-C000-000000000046}\TypeLib以validation类型库GUID(应该是{00062FFF-0000-0000-C000-000000000046}),然后使用正确的类型库版本号validation类型库是否确实正确注册了HKEY_CLASSES_ROOT\TypeLib\{00062FFF-0000-0000-C000-000000000046} 。 后一部分应该是问题所在。

如果目标计算机运行64位版本的Windows,请尝试将Project + Properties,Build,Platform Target设置为x86。

如果您尝试从Visual Studio访问Outlook并获取错误:

TF400424:无法发送到Microsoft Outlook:无法将“Microsoft.Office.Interop.Outlook.ApplicationClass”类型的COM对象强制转换为接口类型“Microsoft.Office.Interop.Outlook._Application”。 此操作失败,因为由于以下错误,对IID为“{00063001-0000-0000-C000-000000000046}”的接口的COM组件的QueryInterface调用失败:库未注册。 (HRESULT的例外情况:0x8002801D(TYPE_E_LIBNOTREGISTERED))。

请执行下列操作:

  1. 使用注册表, 导航至: HKEY_CLASSES_ROOT \ TypeLib {00062FFF-0000-0000-C000-000000000046}
  2. 根据下面提供的版本表, 删除系统上未安装的任何版本的Outlook的版本密钥(例如9.5)。 例如,如果您不使用Outlook 2013,则删除“9.5”条目。 如果您不使用Outlook 2010,则删除“9.4”条目。 请勿删除 步骤1中配置的版本的条目

Outlook 2007 ==> 9.3

Outlook 2010 ==> 9.4

Outlook 2013 ==> 9.5

在此处输入图像描述


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

以下代码有同样的问题:

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

用以下代替第一行解决了它。

  Dim OutlookMessage As Object 

(VB中的示例但同样适用于C#)