我有一个VSTO插件,它将不会安装在32位计算机上。 (安装时弹出的错误消息是:“此处理器类型不支持此安装包。请与您的产品供应商联系。”) 插件使用Installshield进行安装。 该应用程序使用“ AnyCPU”构建。 如果installshield中的任何内容引用了64位,则似乎强制为64位。 (例如,我的加载项具有注册表项,即其Description,FriendlyName,LoadBehavior和Manifest。它们位于HKLM /软件(64位)/ Wow6432Node / Microsoft / Office / Outlook / Addins / myAddin中) 我真的不知道这是否需要吗?
所以我的解决方法是发布两个版本...其中一个没有任何64位注册表引用。
我该如何解决?我一直在抛弃Installshield LE的想法,并与其他一些安装程序一起迁移到vs2017 ...
答案 0 :(得分:2)
我有一个VSTO插件,它不会安装在32位计算机上。
您是说Office未加载该插件?还是安装包本身无法安装?
我假设未加载该插件。我不知道installshield如何控制package components位,但是我将尝试提供一个可以应用于任何工具的答案,只要在该工具中可配置以下选项即可。
使用MSI软件包安装VSTO加载项时,您需要根据安装的Office版本(而不是操作系统之一)的位数,确保注册表项最终位于正确的注册表配置单元中。
因此,对于具有Office x86的计算机,您具有以下注册表:
以上两条路径表示MSI中的单个配置。例如,如果您创建了在32位计算机上安装标准x86注册表项的标准MSI,则同一MSI将自动重定向到x64计算机的Wow6432Node,并且如果该计算机安装了32位办公室,则一切正常。
如果您有一台带有 64位办公室的x64计算机,则需要强制将该注册表安装在Wow6432Node之外,即直接位于: HKLM / Software / Microsoft / Office / Outlook / Addins / myAddin
如果您将注册表MSI组件标记为64位(也不知道此选项在IS中的位置,但我确定可以找到它),则也可以从32位MSI完成。这将迫使操作系统停止将这些注册表项重定向到Wow6432Node。而且MSI也应该在32位计算机上工作,在该计算机上此标志将被忽略。
但是,您应该知道在32位MSI程序包中将组件标记为64位会触发一些ICE errors/warning。
这些位于HKLM /软件(64位)/ Wow6432Node / Microsoft / Office / Outlook / Addins / myAddin)
仅供参考,这是一台64位计算机上注册表的32位区域,不是 64位计算机上。只有32位应用程序可以从此位置读取注册表。