为每个新版本WIX创建新文件夹

时间:2016-09-15 13:01:12

标签: c# wix windows-installer installer

当我构建安装程序项目(如ClickOnce发布按钮)时,是否可以在WIX​​配置文件中基于项目Assembly version<?define ProductVersion="1.0.0.0" ?>版本生成新文件夹。 我想要这样的东西:

MyProjectPublishes/
----MyProject1.0.0.0/
        MyProjectSetup.msi
----MyProject2.0.0.0/
        MyProjectSetup.msi
----MyProject3.0.0.0/
        MyProjectSetup.msi

1 个答案:

答案 0 :(得分:1)

是的,但请记住,您的MSI不应该是主要升级,否则它们将删除以前的版本(除非您想要的是这样;大概您需要并排文件夹,以便它们可以同时安装)。 / p>

首先,要了解您不应该对组件GUID进行硬编码。虽然支持将相同的组件GUID转到不同的文件夹,但它会产生许多问题,最好避免更新和卸载。维护也很痛苦,所以只需对组件使用自动GUID。

像这样创建目录创作(假设你传入一个ProductVersion变量):

<?define ProductName="MyProduct"?>
<?ifndef ProductVersion?>
  <?define ProductVersion=1.0.0?>
<?endif?>
<Product Name="$(var.ProductName)" Version="$(var.ProductVersion)" ...>
  <Directory Id="TARGETDIR" Name="SourceDir">
    <Directory Id="ProgramFilesFolder" Name="Program Files">
      <Directory Id="INSTALLDIR" Name="$(var.ProductName)">
        <Directory Id="VersionDir" Name="$(var.ProductVersion)"/>
      </Directory>
    </Directory>
  </Directory>
</Product>

这只是目录表的示例代码段。我将INSTALLDIR定义为根产品路径,以便您控制进入每个版本目录的所有版本,以便用户不会意外地使用不同的组件GUID来压缩以前的版本(同一位置的不同组件GU​​ID导致在卸载时删除文件)因为它们没有被重新计算。)

要安装,您可以执行以下操作:

<Component Directory="VersionDir">
  <File Source="foo.dll"/>
</Component>

请注意,我没有指定GUID,也没有指定任何其他ID。它们将被生成,并且GUID将是稳定的(意思是,使用相同的版本,所有后续的重建将具有相同的GUID,直到您更改版本 - 这正是它应该如何工作)。

要查看正在使用的示例(以及如何从引用的C#项目中的文件中获取版本),请参阅https://github.com/heaths/psmsi/tree/develop/src/Setup