c# - 无法转换类型为 'Microsoft.Office.Interop.Outlook.ApplicationClass' {00063001-0000-0000-C000-000000000046} HRESULT : 0x80040155 的 COM 对象

标签 c# .net outlook ms-office

我在使用一段非常简单的 C# .NET 代码时遇到问题,该代码(目前)应该只是检索运行 WinForms 应用程序的计算机上安装的 Office 的版本号:

var oApp = new Outlook.ApplicationClass();
var outlookVersionString = oApp.Version;

它实例化了正确的对象,但是当我尝试访问 Version 属性时,我得到以下信息:

{“无法将‘Microsoft.Office.Interop.Outlook.ApplicationClass’类型的 COM 对象转换为接口(interface)类型‘Microsoft.Office.Interop.Outlook._Application’。此操作失败,因为 QueryInterface 调用由于以下错误,IID 为“{00063001-0000-0000-C000-000000000046}”的接口(interface)的 COM 组件失败:接口(interface)未注册(HRESULT 异常:0x80040155)。”

我已经在网上做了很多搜索,所以我尝试过的方法:

  1. 检查 [HKEY_CLASSES_ROOT\TypeLib\{00062FFF-0000-0000-C000-000000000046}] 中是否只存在一个 key (9.6)
  2. 检查此 ClassID 和版本是否匹配 [HKEY_CLASSES_ROOT\Interface\{00063001-0000-0000-C000-000000000046}]
  3. 使用 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\regtlibv12.exe "C:\Program Files (x86)\Microsoft Office\root\Office16\MSOUTL.OLB"注册 MSOUTL.OLB (失败,因为 regtlibv12.exe 未随 VS2017 一起提供)
  4. 正在下载 regtlibv12.exe 并重试(失败,因为“此应用无法在您的 PC 上运行”)。
  5. 运行 C:\Users\uczms>c:\Windows\Microsoft.NET\Framework64\v4.0.30319\regasm.exe/TLB "C:\Program Files (x86)\Microsoft Office\root\Office16\MSOUTL.OLB"(失败,因为它不是有效的 .NET 程序集)
  6. 运行 C:\Users\uczms>c:\Windows\Microsoft.NET\Framework64\v2.0.50727\regasm.exe/TLB "C:\Program Files (x86)\Microsoft Office\root\Office16\MSOUTL.OLB"(失败,因为它不是有效的 .NET 程序集)
  7. 使用适用于旧 Interop 库的内容(编辑:注意,这似乎不适用于我们的 Office 2016 桌面),这是一个微妙的变化:

var oApp = new Outlook.Application(); var outlookVersionString = oApp.Version;

可能值得注意的是,我有一个干净的 Windows 10 Enterprise N Creators Update 和 Office 2016/365 ProPlus,没有安装任何以前的版本,也没有降级。

我通常不是桌面应用程序开发人员,所以虽然我掌握了其中一些库注册工具,但我绝不是专家..

最佳答案

尝试“修复”您的 Microsoft Office 安装。转到程序和功能,选择修改,然后选择联机修复。我遇到了同样的问题,这解决了它。

关于c# - 无法转换类型为 'Microsoft.Office.Interop.Outlook.ApplicationClass' {00063001-0000-0000-C000-000000000046} HRESULT : 0x80040155 的 COM 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47332331/

相关文章:

c# - WPF 图像控制和 jpg 旋转元数据

c# - 简单的正则表达式匹配问题?

c# - 如何知道附件是否是 Outlook 电子邮件中的签名

c# - 在 .NET 中将整个数据库从一台服务器复制到另一台服务器

c# - Visual Studio 插件显示资源文件中的文本而不是代码

interop - 通过互操作同时支持 Outlook 2003 和 2007

Javascript:打开 Outlook 并将附件添加到新电子邮件

c# - File.AppendAllText 是否管理冲突(即多用户并发)?

c# - RFC_READ_TABLE 查询大量列后抛出 Rfcabapexception

c# - 如何评估包含局部变量名称的字符串作为 C# 中的代码