C# 使用WiX installer for.NET control在32个版本上设置注册表项。64位,WOW6432节点

C# 使用WiX installer for.NET control在32个版本上设置注册表项。64位,WOW6432节点,c#,.net,windows,wix,registry,C#,.net,Windows,Wix,Registry,我正在MSI安装程序的帮助下部署一个用户控件。安装程序是使用WiX 3.8创建的,应该将控件安装到用户计算机上的GAC中: <Directory Id="D_GAC_PH" Name="GAC"> <Component Id="RT_PRODUCTDLL" Guid="CC18029F-3D4D-4C16-8871-88438DF5F8C1"> <!-- Runtime, assembly in GAC -->

我正在MSI安装程序的帮助下部署一个用户控件。安装程序是使用WiX 3.8创建的,应该将控件安装到用户计算机上的GAC中:

<Directory Id="D_GAC_PH" Name="GAC">
    <Component Id="RT_PRODUCTDLL" Guid="CC18029F-3D4D-4C16-8871-88438DF5F8C1">
        <!-- Runtime, assembly in GAC -->
            <File Id="F_RT_PRODUCTDLL" 
                  Name="control.dll" 
                  Source="$(var.ProductDLLPath)" 
                  KeyPath="yes" 
                  Assembly=".net"/>
    </Component>
</Directory>
以下WiX组件可以很好地注册密钥:

<RegistryKey
       Root="HKLM"
       Key="SOFTWARE\Microsoft\.NETFramework\AssemblyFolders\$(var.CompanySafeName)">
            <RegistryValue
                Value="[$DT_ProductDLL]"
                Type="string"/>
</RegistryKey>

注意,我选择了不带“Wow6432”节点的键。但是,该密钥实际上是32位系统所期望的密钥。在64位系统上测试上述(非WoW)键将导致添加正确的(WOW6432Node)键。我想,WiX/Windows/Windows安装程序正在将密钥重定向到64位上正确的WoW节点。(?)


在不同版本的WiX/Windows Installer中,这一点有多可靠?我希望它能在较旧的Windows Installer版本以及32位系统上运行。是否在某个地方记录或指定了这一点?还是在WiX中使用条件并手动决定键更好

通常,通过让组件是否为Win64将注册表定向到适当的位置,然后它就可以正常工作了。我相信Win64的默认值可能默认为包的体系结构,因此您可能有一个32位的设置。为了明确起见,您可以将组件标记为Win64=“no”作为提醒,但简单的回答是它应该是可靠的。很明显,您的组件默认为32位组件,因此它在新旧系统上都是正确的

谢谢。我读了更多关于注册表重定向的内容,似乎这是一条路要走。
<RegistryKey
       Root="HKLM"
       Key="SOFTWARE\Microsoft\.NETFramework\AssemblyFolders\$(var.CompanySafeName)">
            <RegistryValue
                Value="[$DT_ProductDLL]"
                Type="string"/>
</RegistryKey>