【问题标题】:VSTO x64 runtime installed but can't be foundVSTO x64 运行时已安装但找不到
【发布时间】:2012-05-30 20:06:29
【问题描述】:

我创建了一个为 Windows 2010 部署插件的 WiX 安装程序。目标系统当前安装了 x64 Win 和 Office。我浏览了几个微软网站,告诉我我需要一个 x64 安装程序和运行时(因为加载到当前单词运行的过程中)。 此安装程序使用以下语句检查 VSTO 运行时是否存在:

<?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条目(即使安装了运行时)。 我已经尝试卸载并重新安装运行时(重新启动),但它不起作用。

我还删除了检查以安装我的插件,但它并没有真正加载。

因此我的问题是,是否有任何已知的错误问题或我使用了错误的注册表项?

【问题讨论】:

    标签: .net wix registry 64-bit 32bit-64bit


    【解决方案1】:

    在 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

    【讨论】:

    • 这仅适用于 HKLM 还是适用于每个基本密钥?我有一个红色,可能应该将正确的 AddIn 注册表项(FriendlyName、LoadBehaviour、Manifest 文件位置)放入 HKCU 中,仅供一个用户使用。我是否必须将这些键放入 WoW6432Node 中?
    • @inva 仅适用于注册表的一部分,请参阅更新后的答案。
    • 非常感谢,这个链接在另一个方面帮助了我很多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-06
    • 2014-09-30
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-11
    相关资源
    最近更新 更多