我一直在寻找解决方案,但没有成功。我必须承认我和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?>
答案 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>