【发布时间】:2021-02-18 02:04:45
【问题描述】:
在我的 WIX 项目中,我确实从我的应用程序的 .exe 文件中读取了 BuildVersion 变量。可以说目前它的 1.0.0.0。一般的想法是允许用户在单台电脑上安装多个版本的应用程序。有两个问题:
-
如何创建名称中包含版本信息的 .msi 输出文件?例如 Application_v1.0.msi。老实说,我什至不知道从哪里开始。
-
如何在开始菜单和程序文件中为每个版本创建单独的文件夹?想法是在开始菜单和程序文件中都有类似于 Application/v1-0 (v2-0, v3-1 ..generaly v[major]-[minor]) 的结构。
到目前为止,根据第 2 点,我尝试了一些“简单”的方法,例如在本地化文件中:
<WixLocalization Culture="en-us" xmlns="http://schemas.microsoft.com/wix/2006/localization">
<String Id="ProductNameFolder">MyApp\[BuildVersion]</String>
然后在我确实有“目录”部分的文件中:
<Directory Id="TARGETDIR" Name="SourceDir">
<!-- Shortcut folder is a Start Menu Folder-->
<Directory Id="ProgramMenuFolder">
<Directory Id="InstallProgramMenuFolder" Name="!(loc.ProductNameFolder)" />
</Directory>
<?if $(var.Platform)=x86 ?>
<!-- Program Files folder-->
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLFOLDER" Name="!(loc.ProductNameFolder)" />
</Directory>
<?else?>
<!-- Program Files (64 bit) folder-->
<Directory Id="ProgramFiles64Folder">
<Directory Id="INSTALLFOLDER" Name="!(loc.ProductNameFolder)" />
</Directory>
<?endif?>
</Directory>
但是当我尝试构建时,我在使用 loc.ProductNameFolder 的任何地方都会遇到错误Invalid DefaultDir string。
我在目录部分也尝试过类似的东西:
<Directory Id="InstallProgramMenuFolder" Name="!(loc.ProductNameFolder)\$(var.BuildVersion)" />
但这确实给了我如下错误:
The Directory/@Name attribute's value '!(loc.PoductNameFolder)\1.0.0.0', is not a valid long name because it contains illegal characters
一般的想法是使用像 v[major]-[minor] 这样的文件夹名称,但一开始我尝试简单的 version=folder name 概念。到目前为止,我也不知道如何将 Version 转换为 v[major]-[minor]。
我正在使用 WIX 工具集 3.11.2 和 Visual Studio 2019 扩展。
【问题讨论】:
标签: installation wix wix3