使用Wix进行条件安装

时间:2010-06-10 06:00:05

标签: deployment installer wix windows-installer

是否可以使用Visual Studio配置环境从属的条件安装配置?

例如,选择DEBUG或RELEASE配置,Wix会在构建的安装中选择不同的可执行文件。

基本上我将从相同的项目中构建不同的安装,但它们因组件而异。某些组件是从同一个项目构建的,但是使用不同的预处理器选项构建。

当然可以包含每个必需的组件,然后定义功能以便为安装选择特定的组件,但我不想真正重新分发一些可执行文件。

构建不同的Wix项目是唯一的解决方案吗?

3 个答案:

答案 0 :(得分:10)

将另外两个答案和Luca的research放在一起我想出了这个解决方案,这似乎有效(注意字符串比较似乎区分大小写,缺少引号似乎是正确的,我用WiX 3.7进行了测试:

<?if $(var.Configuration) = Debug ?>
  <!-- DEBUG ONLY -->

  [ ... insert debug only XML here ... ]

  <!-- END DEBUG ONLY -->
<?else?>
  <!-- RELEASE ONLY -->

  [ ... insert release only XML here ... ]

  <!-- END RELEASE ONLY -->
<?endif?>

答案 1 :(得分:8)

您的wix脚本可以访问构建参数,例如Configuration('debug'或'release')。因此,您可以通过在组件声明中引用$(var.Configuartion)来有条件地为当前配置包含正确的二进制文件:

<Component Id="myProject.dll"
               DiskId="1"
               Guid="*">
  <File Id="myProject.dll"
            Name="myProject.dll"
            Source="..\myProject\bin\$(var.Configuration)\myProject.dll" />
</Component>

在发布模式下运行构建时,此脚本将获取二进制文件的发行版本。同样,在调试模式下,将拾取调试二进制文件。此方法不需要预处理 - 脚本在构建时进行与配置相关的决策。

答案 2 :(得分:6)

使用预处理器,例如:<?if?>,根据配置有条件地包含/排除组件。