Outlook 2007来自C#-COM异常,键入_E_libnotregisted

Outlook 2007来自C#-COM异常,键入_E_libnotregisted,c#,com,interop,outlook-2007,office-interop,C#,Com,Interop,Outlook 2007,Office Interop,我正在尝试制作一个程序来打开新的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 _mes

我正在尝试制作一个程序来打开新的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);
Dim OutlookMessage As Outlook.MailItem
Dim AppOutlook As New Outlook.Application
OutlookMessage = AppOutlook.CreateItem(Outlook.OlItemType.olMailItem)
其中OutlookApp==Microsoft.Office.Interop.Outlook命名空间

在调用清单的第二行时,我一直得到这个异常:(InvalidCastException)

无法强制转换类型为的COM对象 'Microsoft.Office.Interop.Outlook.ApplicationClass' 到接口类型 “Microsoft.Office.Interop.Outlook.\u应用程序”。 此操作失败,因为 COM上的QueryInterface调用 与IID接口的组件 “{00063001-0000-0000-C000-0000000000 46}” 由于以下错误而失败: 图书馆未注册。 (HRESULT的异常:0x8002801D (类型_E_LIBNOTREGISTERED))

在我的另一个站点上,该代码在Outlook 2003中运行良好


如果有任何解决办法,我将不胜感激。

那台机器上没有正确安装Office。您可以使用Regedit.exe验证,导航到
HKEY_CLASSES_ROOT\Interface\{00063001-0000-0000-C000-0000000000 46}\TypeLib
以验证类型库GUID(应为{00062FFF-0000-0000-C000-0000000000 46}),然后导航到
HKEY_CLASSES_ROOT\TypeLib\{00062FFF-0000-0000-C000-0000000000 46}
使用正确的类型库版本号验证类型库是否正确注册。后一部分应该是问题所在


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

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


以下是修复方法:

与以下代码有相同的问题:

var _outlookInstance = new Microsoft.Office.Interop.Outlook.Application();
var _message = (OutlookApp.MailItem)_outlookInstance.CreateItem(OutlookApp.OlItemType.olMailItem);
Dim OutlookMessage As Outlook.MailItem
Dim AppOutlook As New Outlook.Application
OutlookMessage = AppOutlook.CreateItem(Outlook.OlItemType.olMailItem)
将第一行替换为以下内容为我解决了问题

 Dim OutlookMessage As Object

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

如果您试图从Visual Studio访问Outlook并获得错误:

TF400424:未能发送到Microsoft Outlook:无法将类型为“Microsoft.Office.Interop.Outlook.ApplicationClass”的COM对象强制转换为接口类型“Microsoft.Office.Interop.Outlook.\u应用程序”。此操作失败,因为对IID为“{00063001-0000-0000-C000-0000000000 46}”的接口的COM组件的QueryInterface调用由于以下错误而失败:库未注册。(来自HRESULT的异常:0x8002801D(类型_E_libnotregisted))

请执行以下操作:

  • 使用注册表,导航到:HKEY_CLASSES_ROOT\TypeLib{00062FFF-0000-0000-C000-0000000000 46}
  • 根据下面提供的版本表,删除系统中未安装的任何Outlook版本的版本密钥(如9.5)。例如,如果您不使用Outlook 2013,请删除“9.5”条目。如果您没有使用Outlook 2010,请删除“9.4”条目不要删除步骤1中配置的版本条目
  • Outlook 2007==>9.3

    展望2010==>9.4

    2013年展望==>9.5



    参考资料:

    在Windows x64上,了解WOW64注册表()@nobugz:关于第二步:当我导航到该位置时,其中存储的值表示“未设置值”。这是个问题吗?是否应将其设置为specyfic值?如果是这样的话,应该有什么价值呢。在HKEY_类的子节点中,ROOT\TypeLib\{00062FFF-0000-0000-C000-0000000000 46}a也有一些emty值。应该设置吗?这就解释了为什么它不起作用。不知道发生了什么,追逐“未正确安装”的角度。也许你的注册表是toast,在另一台机器上试试吧。原来是我的构建平台。谢谢很棒的发现-删除
    HKEY_CLASSES\u ROOT\TypeLib\{00062FFF-0000-0000-C000-0000000000 46}\9.5
    成功了!这是Office 2013卸载程序的一个错误。很好的发现,修复了我的问题+1,因为没有过多的9.5字段。在我的例子中,问题是当我降级到Outlook 2010时,我修改了安装位置(即不在默认的ProgramFiles文件夹中)。但是,windows没有相应地更新“HKEY_CLASSES_ROOT\TypeLib\{00062FFF-0000-0000-C000-0000000000 46}\9.4\0\win64”中的值。手动更新该值并将其指向正确位置后,问题得到解决。