【问题标题】:Create new folder for each new version WIX为每个新版本 WIX 创建新文件夹
【发布时间】:2016-09-15 13:01:11
【问题描述】:

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

【问题讨论】:

    标签: c# wix windows-installer installation


    【解决方案1】:

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

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

    像这样创建目录创作(假设您传入 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>
    

    这只是目录表的一个示例 sn-p。我将 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

    【讨论】:

    • 好吧,我没有问安装文件夹。我询问了如何将 msi 自动构建到具有版本号的文件夹
    • “自动构建 msi 到文件夹”是什么意思?构建 MSI 的目的是将东西安装到特定文件夹。如果您谈论的是松散文件的源文件夹布局,同样的建议也适用。 Name 属性是默认的目标和源名称,但您也可以始终显式设置源目录。
    • 我的意思是当您在 Visual Studio 中单击 Build 按钮时,我想在新文件夹中获取 .msi 文件(文件夹名称应为程序的程序集版本)。请参阅我的问题中的结构。然后我想在服务器上为用户发布这个文件夹,这样他们就可以下载他们需要的版本。我的问题是:这是否可以自动执行以防止版本错误。
    • 这确实是一个 MSBuild 问题。您需要修改您的 $(OutDir)。 WiX 目标支持托管项目共享的各种标准 MSBuild 约定。它们默认为“bin\$(Configuration)”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多