.net - 已安装 VSTO x64 运行时但找不到

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

我创建了一个 WiX 安装程序,用于部署 Windows 2010 的加载项。目标系统当前安装的是 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 条目(即使安装了运行时)。 我已经尝试卸载并重新安装运行时(实际上重新启动),但它不起作用。

我还删除了安装插件的检查,但实际上并没有加载。

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

最佳答案

在 x64 系统上,WoW64 应用程序会透明地重定向到注册表的 Wow6432Node 节点,因此它们实际上会查找类似 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VSTO Runtime Setup 的 key > 它就在那里。但真正的 x64 应用程序会查看真正的 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VSTO Runtime Setup 节点,并且 key 自然不存在于此。这很可能会导致您的安装程序失败。因此,对于 x64 安装程序,您需要使用 Wow6432Node 路径部分指定完整节点。

这称为注册表反射和 covered in details here .

关于.net - 已安装 VSTO x64 运行时但找不到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10734114/

相关文章:

windows - 注册表版本错误

windows-7 - 无需注销即可启用/禁用 ClearType

c# - 如何比较 lambda 表达式与 QueryOver where 限制中的别名属性?

.net - 如何向 .NET 4.5 WCF 服务添加异步支持,以免中断现有客户端?

visual-c++ - 缺少合并模块 - Microsoft_VC100_CRT_x86.msm

visual-studio - 必须安装WiX Toolset v3.11(或更高版本)构建工具才能构建此项目

.net - WPF 数据网格文本省略号不起作用

c# - Silverlight 5 - 调试 npctrl.dll 崩溃

service - WiX ServiceControl在卸载时停止服务,但不要在安装时启动它

registry - 使用 regsvr32 注销 DLL