Wix:如何在64位机器上写入32位寄存器

时间:2016-10-18 11:11:55

标签: wix

我一直在寻找解决方案,但没有成功。我必须承认我和wix一起打招呼。我有一个项目(WPF + caliburn,使用Visual Studio 2015),为x86和x64单独编译。我使用x64机器来创建两个MSI。不幸的是,在安装过程中,安装程序总是写入64位寄存器,这会导致应用程序出现问题。

我创建了以下组件,尝试使用Win64 =" no"入境,遗憾的是没有成功。可以somone请建议正确的组件配置?

<DirectoryRef Id="TARGETDIR">
  <?if $(var.Platform)="x64"?> 
          <Component Id="Registry_DefaultStoragePath" Guid="123-456-789" Win64="yes">
              <RegistryKey Root="HKLM"
                                       Key="Software\KeyName" Action="createAndRemoveOnUninstall">
                  <RegistryValue Type="string" Name="DefaultStorageLocation" Value="[DEFAULTSTORAGE]" KeyPath="yes"/>
              </RegistryKey>
          </Component>

          <Component Id="Registry_InstallType" Guid="123-456-789" Win64="yes">
              <RegistryKey Root="HKLM"
                                       Key="Software\KeyName" Action="createAndRemoveOnUninstall" >
                  <RegistryValue Type="string" Name="InstallType" Value="[INSTALLTYPE]" KeyPath="yes"/>
              </RegistryKey>
          </Component>
  <?endif?>
  <?if $(var.Platform)="x86"?> 
          <Component Id="Registry_DefaultStoragePath" Guid="132-456-789" Win64="no">
              <RegistryKey Root="HKLM"
                                       Key="Software\KeyName" Action="createAndRemoveOnUninstall">
                  <RegistryValue Type="string" Name="DefaultStorageLocation" Value="[DEFAULTSTORAGE]" KeyPath="yes"/>
              </RegistryKey>
          </Component>

          <Component Id="Registry_InstallType" Guid="123-456-789" Win64="no">
              <RegistryKey Root="HKLM"
                                       Key="Software\KeyName" Action="createAndRemoveOnUninstall" >
                  <RegistryValue Type="string" Name="InstallType" Value="[INSTALLTYPE]" KeyPath="yes"/>
              </RegistryKey>
          </Component>
  <?endif?>    

1 个答案:

答案 0 :(得分:0)

主要问题是<?if $(var.Platform)="x64"?>由预处理器处理,因此它在编译时计算,而不是在运行时计算。

为了处理x86 / x64运行时,您可以这样做:

<component ....>
  <condition>NOT VersionNT64</condition>
  <!-- 32 bit component -->
  <!-- Add component content here -->
</component>
<component ....>
  <condition>VersionNT64</condition>
  <!-- 64 bit component -->
  <!-- Add component content here -->
</component>