来自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))。
请执行下列操作:
- 使用注册表, 导航至: HKEY_CLASSES_ROOT \ TypeLib {00062FFF-0000-0000-C000-000000000046}
- 根据下面提供的版本表, 删除系统上未安装的任何版本的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#)