【问题标题】:WIX Toolset - application version in MSI name and installation foldersWIX 工具集 - MSI 名称和安装文件夹中的应用程序版本
【发布时间】:2021-02-18 02:04:45
【问题描述】:

在我的 WIX 项目中,我确实从我的应用程序的 .exe 文件中读取了 BuildVersion 变量。可以说目前它的 1.0.0.0。一般的想法是允许用户在单台电脑上安装多个版本的应用程序。有两个问题:

  1. 如何创建名称中包含版本信息的 .msi 输出文件?例如 Application_v1.0.msi。老实说,我什至不知道从哪里开始。

  2. 如何在开始菜单和程序文件中为每个版本创建单独的文件夹?想法是在开始菜单和程序文件中都有类似于 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


    【解决方案1】:

    第 1 点我自己的“部分”解决方案 - 安装文件名和版本:

    卸载项目,在 BeforeBuild 部分添加类似这样的内容:

    获取构建版本:

    <GetAssemblyIdentity AssemblyFiles="..\src\MyApp\bin\Debug\MyApp.exe">
      <Output TaskParameter="Assemblies" ItemName="AssemblyVersion" />
    </GetAssemblyIdentity>
    

    使用版本创建自定义 .msi 名称:

    <CreateProperty Value="MyAppInstaller_v%(AssemblyVersion.Version)">
        <Output TaskParameter="Value" PropertyName="TargetName" />
    </CreateProperty>
    

    结果你会得到类似 MyAppInstaller_v1.0.0.0 的东西。我仍然需要将其转换为 MyAppInstaller_v1.0

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多