使用Wix进行条件安装

Luc*_*uca 9 deployment installer windows-installer wix

是否可以使用Visual Studio配置环境进行条件安装配置?

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

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

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

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

Bra*_*s83 11

把另外两个答案和Luca的研究放在一起我想出了这个解决方案,这似乎有效(请注意,字符串比较似乎区分大小写,缺少引号似乎是正确的,我用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?>
Run Code Online (Sandbox Code Playgroud)

  • `<?else>`应该是`<?else?>` (2认同)

Stu*_*nge 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>
Run Code Online (Sandbox Code Playgroud)

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


Bob*_*son 6

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