无法添加对 Outlook 2016 (Office 365) Interop (16.0.0.0) 的引用

2023-11-26

我正在尝试在 C# .NET 4.6.1 WPF 项目中添加对“Microsoft Outlook 16.0 对象库”的引用,因为我安装了 Office 2016。以前版本的对象库与 2016 版 Office 不兼容。

如果我使用 Excel 的 VBA 编辑器,则会列出“Microsoft Outlook 16.0 对象库”,并且存在于C:\Program Files\WindowsApps\Microsoft.Office.Desktop_16010.9126.2116.0_x86_8wekyb3d8bbwe\VFS\ProgramFilesCommonX86\Microsoft Shared\OFFICE16\MSOUTL.OLB,如下所示:

enter image description here

但是,当我使用 Visual Studio 时,COM 选项卡未列出“Microsoft Office 16.0 对象库”,并且当我尝试浏览到C:\Program Files\WindowsApps,我收到“您当前无权访问此文件夹”,然后单击“继续”(获取访问权限)会导致“您被拒绝访问此文件夹”。

所以基本上,Office 2016 dll 似乎被隐藏在一个人、狗和本地管理员都无法访问的文件夹中。


我想做的就是连接到打开的 Outlook 应用程序,然后发送一封带有附件的电子邮件,所以也许另一个要问的问题是,是否有一些新的与 Outlook 2016 进行通信的方式尚未出现我的谷歌马拉松?


另外值得注意的是,我的 Office 版本是作为“Windows 应用商店应用程序”安装的,因此不会出现在通常的“添加/删除程序”列表中,因此我找不到任何用于安装的“修复”选项。

Thanks.


进一步的调查表明我正在做正确的事情 - 尝试添加对“Microsoft Outlook 16.0 对象库”的 COM 引用现在是针对 Outlook 的正确方法...https://stackoverflow.com/a/21018418/5040941.

我检查了 GAC,程序集未注册。我已经通过“应用程序和功能”右键单击开始菜单选项进行了修复,但它们仍然没有出现 - 就好像 Windows 应用商店应用程序只是将其 dll 推入Program Files\WindowsApps\*文件夹,并且不必费心在 GAC 中注册它们。


回应非常感谢的评论!

使用以下代码

Outlook.Application application = (Outlook.Application)Marshal.GetActiveObject("Outlook.Application");

如果我使用 nugetMicrosoft.Office.Interop.Outlook包裹,我得到一个System.Runtime.InteropServices.COMException: 'Invalid class string (Exception from HRESULT: 0x800401F3 (CO_E_CLASSSTRING))'例外。

如果我尝试使用Microsoft Outlook 15.0 Object Library or Microsoft Outlook 14.0 Object Library通过添加引用的程序集/扩展选项卡进行引用,我得到一个System.Runtime.InteropServices.COMException: 'Invalid class string (Exception from HRESULT: 0x800401F3 (CO_E_CLASSSTRING))'例外。

我不认为访问 WindowsApps 文件夹是正确的方法。 首先,它由于某种原因被锁定,这通常表明如果我开始挖掘并更改安全权限,可能会出现麻烦,更不用说在我的解决方案中维护最新 dll 的副本无疑会给我的项目增加不必要的复杂性。

其次,但更重要的是,如果我安装了 Office,并且可以从 Excel Vba 访问“Microsoft Outlook 16.0 对象库”,那么为什么我不能从 Visual Studio 访问它?

显然,安装时存在一些问题,没有正确注册 dll,只有 Excel 有一些技巧可以用来使引用可用。


是否有人阅读本文成功安装了 Office 365/2016 Windows Store 并在 Visual Studio 中找到了对“Microsoft Outlook 16.0 对象库”的引用?

只有我有这个问题吗?!因为它影响我办公室中运行 Windows 10 和 Office 365 的多台计算机...


为了回答 RogerN(谢谢),请参阅下图 - 我没有列出 Microsoft.Office.Interop.Outlook 版本 16,也没有列出 Microsoft.Office.Core。

enter image description here

如果我尝试使用 v15 库,则会收到以下错误:

System.Runtime.InteropServices.COMException HResult=0x80040154 Message=Retrieving the COM class factory for component with CLSID {0006F03A-0000-0000-C000-000000000046} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)). Source=mscorlib


*答案是*

我从戴尔购买的两台计算机都是 64 位的,但它们预装了 32 位 Windows Store 版本的 MS Office 2016/365。

为了解决这个问题,我必须:

  • 从中卸载商店应用程序Settings > Apps > Apps&Features > Microsoft Office Desktop Apps > Uninstall
  • 登录portal.office.com
  • 选择安装office应用程序,高级,选择64位版本

我无法理解为什么戴尔认为我们希望在 64 位计算机上安装 32 位版本,或者为什么 Microsoft 的人没有发布此问题的解决方案,但尽管如此,RogerN 是正确的。感谢大家抽出时间来帮助我。


详细阐述我之前的评论:根据您的描述,听起来您已经在 64 位计算机上安装了 32 位版本的 Microsoft Office。只有 32 位 COM 对象会被注册,因此 64 位 .NET 应用程序将无法找到它们。如果您搜索注册表,您应该会发现 0006F03A-0000-0000-C000-000000000046 类 ID 仅在 Wow6432Node 下注册。

要解决此问题,您可以安装 64 位版本的 Office 或强制 .NET 应用程序面向 x86 平台。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法添加对 Outlook 2016 (Office 365) Interop (16.0.0.0) 的引用 的相关文章

  • 获取 std::variant 当前持有的 typeid(如 boost::variant type())

    我已经从 boost variant 迁移到 std variant 但遇到了障碍 我在 boost type 中使用了一个很好的函数 它可以让你获取当前持有的 typeid 看https www boost org doc libs 1
  • 是否允许将类模板类型参数键入相同的名称?

    这似乎可以在 MSVC 中按预期编译甚至工作 但它是合法的 C 代码吗 它是否能保证执行此处所期望的操作 即将模板类型导出到结构体的同名用户 template
  • C# 中四舍五入到偶数

    我没有看到 Math Round 的预期结果 return Math Round 99 96535789 2 MidpointRounding ToEven returning 99 97 据我了解 MidpointRounding ToE
  • 静态类变量与外部变量相同,只是具有类作用域吗?

    在我看来 静态类变量与外部变量相同 因为你只需要declare它在static int x extern int x语句 并在其他地方实际定义它 通常在 cpp 文件中 静态类变量 h file class Foo static int x
  • Paradox 表 - Oledb 异常:外部表不是预期的格式

    我正在使用 Oledb 从 Paradox 表中读取一些数据 我遇到的问题是 当我将代码复制到控制台应用程序时 代码可以工作 但在 WinForms 中却不行 两者都以 x86 进行调试 我实际上只是复制代码 在 WinForms 应用程序
  • 方法“xxx”不能是事件的方法,因为该类派生的类已经定义了该方法

    我有一个代码 public class Layout UserControl protected void DisplayX DisplayClicked object sender DisplayEventArgs e CurrentDi
  • 为什么 Excel 有时会在工作表名称中添加 $?

    我有时但并非总是发现 Excel 会放置一个 位于工作表名称末尾 但在 Excel 中看不到 只有在尝试使用 C 将其导入 SQL Server 时才可见 我遇到过很多不同的情况 它保留了原始工作表 但也创建了第二个空的 隐藏 工作表 其中
  • 默认值 C# 类 [重复]

    这个问题在这里已经有答案了 我在控制器中有一个函数 并且我收到表单的信息 我有这个代码 public Actionresult functionOne string a string b string c foo 我尝试将其转换为类似的类
  • 手动将 ClientBase 集合类型从 Array[] 更改为 List<>

    我将自己的 WCF 代理与 Client Base 一起使用 我想做一些类似于 svc util 中的 ct 属性的操作 并告诉代理返回 List 集合类型 我不能使用 List 因为实体由 nhibernate 管理 所以我必须使用 IL
  • 防止GDB中的PLT(过程链接表)断点

    在最新版本的 GDB 中 在库函数调用上设置断点会导致多个实际断点 调用过程链接表 PLT 实际的函数调用 这意味着当调用库函数时 我们每次都会经历两次中断 在以前的 GDB 版本中 只会创建 2 因此您只能得到一次中断 那么问题来了 是否
  • dropdownlist DataTextField 由属性组成?

    有没有一种方法可以通过 C 使 asp net 中的下拉列表的 datatextfield 属性由对象的多个属性组成 public class MyObject public int Id get set public string Nam
  • 正确使用“extern”关键字

    有一些来源 书籍 在线材料 解释了extern如下 extern int i declaration has extern int i 1 definition specified by the absence of extern 并且有支
  • 设计 Javascript 前端 <-> C++ 后端通信

    在我最近的将来 我将不得不制作一个具有 C 后端和 Web 前端的系统 要求 目前 我对此了解不多 我认为前端将触发数据传输 而不是后端 所以不需要类似 Comet 的东西 由于在该领域的经验可能很少 我非常感谢您对我所做的设计决策的评论
  • 如何访问窗口?

    我正在尝试使用其句柄访问特定窗口 即System IntPtr value Getting the process of Visual Studio program var process Process GetProcessesByNam
  • TPL 数据流块下游如何获取源生成的数据?

    我正在使用 TPL Dataflow 处理图像 我收到处理请求 从流中读取图像 应用多次转换 然后将生成的图像写入另一个流 Request gt Stream gt Image gt Image gt Stream 为此 我使用块 Buff
  • 如何获取 QIcon 的文件/资源​​路径

    假设我做了这样的事情 QIcon myIcon resources icon ico 我稍后如何确定该图标的路径 例如 QString path myIcon getPath 问题是 没有getPath 会员 我找不到类似的东西 但肯定有办
  • 在 C++ 和 Windows 中使用 XmlRpc

    我需要在 Windows 平台上使用 C 中的 XmlRpc 尽管我的朋友向我保证 XmlRpc 是一种 广泛可用的标准技术 但可用的库并不多 事实上 我只找到一个库可以在 Windows 上执行此操作 另外一个库声称 您必须做很多工作才能
  • g++ C++0x 枚举类编译器警告

    我一直在将可怕的 C 类型安全伪枚举重构为新的 C 0x 类型安全枚举 因为它们是way更具可读性 不管怎样 我在导出的类中使用它们 所以我明确地将它们标记为导出 enum class attribute visibility defaul
  • 在 OpenXML 中应用数字格式

    我正在尝试使用 OpenXML 从头开始 创建 Excel 电子表格 并且一切正常 将实际值转储到实际单元格中 但现在我正在尝试将数字格式应用于列 但遇到了问题 我有styles xml看起来像这样
  • 新的 .NET 6 控制台模板中的 C# 函数重载不起作用

    我在尝试重载该函数时遇到错误Print object in the 新的 NET 6 C 控制台应用程序模板 https learn microsoft com en us dotnet core tutorials top level t

随机推荐

  • 如何用javascript显示数据列表?

    嘿 我想在单击按钮时显示特定输入的数据列表 但我找不到如何操作 HTML
  • 切片集合的 Python 方式是什么?

    我有一些数据列表 例如 some data 1 2 4 1 6 23 3 56 6 2 3 5 6 32 2 12 5 3 2 我想获得具有固定长度的唯一值 我不关心我会得到哪个 并且我也希望它成为set 我知道我能做到set from s
  • 跨多个脚本定义公共变量?

    我有许多 Bash 和 Perl 脚本 它们在功能上不相关 但相关之处在于它们在同一项目中工作 它们在同一个项目中工作的事实意味着我通常在每个脚本的顶部指定相同的目录 相同的项目特定命令 相同的关键字 目前 这并没有让我感到困扰 但我知道将
  • LINQ 表达式返回属性值?

    我正在尝试创建一个通用函数来帮助我使用 LINQ to SQL 从本地列表中选择数千条记录 SQL Server 至少 2005 将查询限制为 2100 个参数 我想选择比这更多的记录 这是一个很好的用法示例 var some produc
  • WordPress 表单操作提交

    在 WordPress 中有一个自己定制的表单 action send form php 提交时 它总是转到send form php 但是这个 php 用于发送信息 我无法使用主题进行样式设置 有没有办法在发送信息并打印出来并在字段中显示
  • 如何使RequiredAttribute与枚举字段一起使用

    我最近意识到 requiredAttribute 不适用于枚举字段 假设我在表单上有两个名为 ddlOfficers 和 ddlApplicationTypes 的选择元素 这两个元素都是在 HtmlHelper 方法的帮助下呈现的 创建d
  • Swift:将参数传递给选择器

    使用 Swift 3 Xcode 8 2 1 Method func moveToNextTextField tag Int print tag 下面的行编译得很好 但是tag有一个未初始化的值 let selector selector
  • C# 中的 Windows 版本 [重复]

    这个问题在这里已经有答案了 我想知道 PC 的 Windows 版本 在 C Framework 3 5 中 我尝试过使用 操作系统 os 环境 OSVersion 版本 ver os Version 但结果是 平台 WIN32NT 版本6
  • 四元数旋转不起作用

    在适用于 Android 的 OpenGL ES 1 中 我有一个由 27 个较小的立方体组成的 Rubic 立方体 我想要旋转 导致特定的小立方体恰好位于视点前面 所以我需要两个向量 一个是从对象原点到特定立方体的向量 另一个是从原点到视
  • 如何对hmatrix进行自动微分?

    Sooooo 事实证明从假矩阵 to hmatrix事实证明数据类型并不平凡 序言供参考 LANGUAGE RankNTypes LANGUAGE ParallelListComp LANGUAGE ScopedTypeVariables
  • 如何在 PHP 中重写 register_argc_argv ?

    我正在使用共享主机 fasthostingdirect 并且出于某种原因 他们默认关闭此标志 这意味着我无法访问 PHP 命令行参数 除非我使用 n no php info 之后标记php exe 试过ini set register ar
  • 在 matplotlib 中使用 3D 数据生成热图

    我有一个函数returnValuesAtTime返回三个列表 x vals y vals and swe vals 所有三个列表的长度相同 并且每个元素swe vals对应于一个x value from x vals and a y val
  • 如何获取当前所有正在运行的任务

    我想获取在 android 中运行的所有任务 我在 ActivityManager 中找到了 getRunningTasks 但从 android 5 0 开始 getRunningTasks 可能不会提供所有任务 在我的情况下 它提供主屏
  • 重写 Javascript 中的等价比较

    是否可以重写 Javascript 中的等价比较 我得到的最接近的解决方案是定义 valueOf 函数并在对象前面加上加号来调用 valueOf 这有效 equal x y true 但这失败了 equal x y true why doe
  • clojure.java.jdbc/延迟查询大结果集

    我正在尝试从数据库读取数百万行并写入文本文件 这是我的问题的延续数据库转储到文本文件有副作用 我现在的问题似乎是在程序完成之前不会发生日志记录 我没有懒惰处理的另一个指标是 在程序完成之前根本不会写入文本文件 根据 IRC 提示 我的问题可
  • 如何在不破坏 Maven 发布插件的情况下传递 javac 多个命令行参数(其中一些包括冒号)?

    当我忘记在 a 中声明serialVersionUIDs 时 我想让我的 Maven 构建失败Serializable班级 和javac 这很容易 javac Xlint serial Werror Source java 直接将其转换为
  • 当您有行跨度时替换行颜色

    我有这个 HTML table class altRowTable 这工作正常 直到我有一些行包含rowspan 各行不一致 所以我有这样的东西 下面的 代表一个空格 不能真正在 SOF 中做表 ID name Number 1 joe 1
  • 释放字符串后仍然可以打印它吗?

    我正在学习和测试 C 中的内存分配 我想测试如果free 叫做 我预计可能存在分段错误或指针NULL当我运行下面的程序后 但是 我仍然可以成功打印输出中的字符串 我也尝试过免费str两次 然后输出 2 发生错误 看起来之前分配的内存已经成功
  • 使用 JavaScript 或 jQuery 监听 Youtube 事件

    我有一个滑块 其中包含 4 个通过 iframe 嵌入代码嵌入的 YouTube 视频 http www youtube com embed i enablejsapi 1 我正在努力使onStateChange四个视频中任何一个的事件调用
  • 无法添加对 Outlook 2016 (Office 365) Interop (16.0.0.0) 的引用

    我正在尝试在 C NET 4 6 1 WPF 项目中添加对 Microsoft Outlook 16 0 对象库 的引用 因为我安装了 Office 2016 以前版本的对象库与 2016 版 Office 不兼容 如果我使用 Excel