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

本文关键字:创建 文件夹 WIX 新版本 | 更新日期: 2023-09-27 18:07:04

当我构建安装程序项目(如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

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

可以,但请记住,你的msi不应该是主要的升级,否则他们会删除以前的版本(除非这是你想要的;大概你想要并排的文件夹,这样它们就可以同时安装)。

首先,要明白你也不应该硬编码组件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的以前的版本(相同位置的不同组件guid会导致文件在卸载时被删除,因为它们不会被重新计算)。

要安装,你可以这样做:

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

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

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