我创建了一个WiX安装程序,为Windows 2010部署了一个添加。目标系统目前是x64 Win&办公室安装。我走过几个微软网站告诉我,我需要的不仅仅是x64安装程序&运行时(因为加载加载到当前单词运行的进程中)。 此安装程序使用以下语句检查VSTO Runtime是否存在:
<?if $(var.Platform)=x64 ?>
<?define win64Flag = "yes"?>
<?else ?>
<?define win64Flag = "no"?>
<?endif ?>
<Property Id="VSTORUNTIMEREDIST">
<RegistrySearch Id="VSTORuntimeRedist" Root="HKLM" Key="SOFTWARE\Microsoft\vsto runtime setup\v4R\VSTORFeature_CLR40" Name="Version" Type="raw" Win64="$(var.win64Flag)"/>
</Property>
<Property Id="OFFICERUNTIME">
<RegistrySearch Id="OfficeRuntime" Root="HKLM" Key="SOFTWARE\Microsoft\VSTO Runtime Setup\v4" Name="Version" Type="raw" Win64="$(var.win64Flag)"/>
</Property>
<Condition Message="The Visual Studio 2010 Tools for Office Runtime is not installed. Please install the Office Runtime.">
<![CDATA[Installed OR VSTORUNTIMEREDIST>="10.0.30319" OR OFFICERUNTIME>="10.0.21022"]]>
</Condition>
实际上它适用于我的安装程序的x86版本,但是在x64模式下构建,它无法在注册表中随时找到x64条目(即使安装了运行时)。 我已经尝试卸载并重新安装运行时(重新启动)但它不起作用。
我还删除了支票以安装我的Add In,但它没有加载然后执行。
因此我的问题是,如果有任何已知的错误问题或我使用了错误的注册表项?
答案 0 :(得分:5)
在x64系统上,WoW64应用程序被透明地重定向到注册表的Wow6432Node
节点,因此它们实际上会找到它所在的HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VSTO Runtime Setup
之类的密钥。但真正的x64应用程序会查看真实的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VSTO Runtime Setup
节点,而且关键是,当然不存在。这很可能导致安装程序失败。因此,对于x64安装程序,您需要指定具有Wow6432Node
路径部分的完整节点。
这称为注册表反射和covered in details here。