64-bit - VSTO 插件是否需要向 Wow6432Node 添加注册表项?
问题描述
我有一个不会安装在 32 位机器上的 VSTO 插件。(安装时的错误弹出窗口是:“此处理器类型不支持此安装包。请联系您的产品供应商。”)插件使用 Installshield 进行安装。该应用程序使用“AnyCPU”构建。如果 installshield 中的任何内容引用 64 位,它似乎强制使用 64 位。(例如,我的插件有其描述、友好名称、负载行为和清单的注册表项。这些位于 HKLM/Software (64bit)/Wow6432Node/Microsoft/Office/Outlook/Addins/myAddin)我真的不知道是否这需要吗?
所以我的解决办法是有两个版本......其中一个没有任何 64 位注册表引用。
我将如何解决这个问题?我一直在玩弄放弃 Installshield LE 并与其他一些安装程序一起迁移到 vs2017 的想法......
解决方案
我有一个不会安装在 32 位机器上的 VSTO 插件。
你的意思是插件不是由Office加载的吗?还是安装包本身无法安装?
我会假设插件没有加载。我不知道 installshield 如何控制包组件位数,但我会尝试提供可以应用于任何工具的答案,只要工具中可以配置以下选项即可。
使用安装 VSTO 插件的 MSI 软件包,您需要确保您的注册表项最终位于正确的注册表配置单元中,这取决于您安装的 Office 版本的位数,而不是操作系统之一。
因此,对于具有 Office x86 的计算机,您拥有以下注册表:
- 在 x86 操作系统上:HKLM/Software/Microsoft/Office/Outlook/Addins/myAddin
- 在 x64 操作系统和 32 位 Office 上:HKLM/Software/Wow6432Node/Microsoft/Office/Outlook/Addins/myAddin
上面的两条路径代表 MSI 中的单一配置。即,如果您创建一个标准 MSI,在 32 位机器上安装标准 x86 注册表项,则相同的 MSI 将自动重定向到 x64 机器的 Wow6432Node,如果该机器安装了 32 位办公室,一切都应该工作。
如果您有一台带有64 位办公室的 x64 机器,那么您需要在 Wow6432Node 之外强制安装该注册表,即直接在:HKLM/Software/Microsoft/Office/Outlook/Addins/myAddin
这也可以从 32 位 MSI 完成,如果您将注册表 MSI 组件标记为 64 位(不知道此选项在 IS 中的位置,但我相信您可以找到它)。这将强制操作系统为这些注册表项停止重定向到 Wow6432Node。并且 MSI 也应该在 32 位机器上工作,该标志将被忽略。
但是,您应该知道,在 32 位 MSI 包中将组件标记为 64 位会触发一些ICE 错误/警告。
这些位于 HKLM/Software (64bit)/Wow6432Node/Microsoft/Office/Outlook/Addins/myAddin)
仅供参考,这是 64 位机器上的 32 位注册表区域,而不是64 位机器。只有 32 位应用程序可以从该位置读取注册表。
推荐阅读
- r - 这个图的名称是什么,粗略地说,如何使用 ggplotly 绘制它?
- python - 如何将包含整数元组的字符串转换为具有整数元素的元组
- php - 使用 PHP 在 safari 中下载文件无法正常工作
- javascript - Promises:如何将“Promise.all”的“then”块中的值返回给调用代码?
- laravel - 在模板 laravel 中显示模块值
- android - 元素共享过渡有效,但多个元素共享无效 [Android]
- mongodb - 向 mongodb 服务器批量插入(1000 个文档)在 GCP 中是 1 IOPS,还是 1000 iops?
- python - label_map_util.load_labelmap 错误:模块“tensorflow”没有属性“gfile”
- android - 膨胀类EditText的错误问题
- c++ - 双/多缓冲区交换模拟