WiX打包程序用于安装.NET。

18
我正在尝试创建一个捆绑包,用于安装.NET Framework 4.0(如果需要安装)。我意识到有类似的问题,但所有答案都只是片段,并没有描述它们应该放在哪个文件中,以及如何导入到.wxs文件中。
这是我在Bundle.wxs文件中拥有的内容。我得到了有关多个入口部分的编译器警告。
错误2:发现多个入口部分“{CF06625F-7B6B-4B6E-A24E-FDDCA7CFFFF4}”和“{0D1EE60A-FC4F-4083-8B1E-311E75A67B4C}”。单个目标中只能存在一个入口部分。
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Bundle UpgradeCode="{C6FF478E-C3DA-4D78-929D-24C3F3307356}" Version="4.0">
    <Chain>
      <PackageGroupRef Id="NetFx40Redist"/>
    </Chain>
  </Bundle>
</Wix>

大多数WiX页面上的链接都已损坏,没有提到在Bundle标记上使用的属性,并且似乎混淆了Package/Product。我在WiX页面上找不到有关为Bundles设置GUID的说明。这是Wix 3.7中的新功能吗?

http://wix.sourceforge.net/manual-wix3/install_dotnet.htm

  1. 我该如何使用预定义的.NET 4.0 PackageGroupRef/PayloadGroupRef?
  2. 它必须在Bundle.wxs中吗?它会被导入到我的主要Product.wxs文件中的哪里?
2个回答

24

这个错误说明你的项目正在构建包含多个以下元素的文件:ProductModulePatchPatchCreationBundle。在你的情况下,看起来你添加了一个带有Bundle元素的文件到已经有Product元素的项目中。目前WiX工具集不支持这样做。你需要将Bundle元素放在单独的项目中。

因此,在创建引导程序和MSI时,你将拥有两个.wixproj文件。第一个.wixproj将包含你的Product信息。第二个.wixproj将包含你的Bundle信息,并且有一个对第一个.wixproj的项目引用,以便正确地进行构建顺序。


好的,那我会为我的捆绑包创建一个单独的项目。一个单一的捆绑包可以有多个安装程序的链,对吗?我的链可能会有.NET 3.5、.NET 4.0、SQL Server安装程序等。 - Stealth Rabbi
是的,没错。Bundle 是一个包集合。 - Rob Mensching
15
找不到任何关于必须引用/创建两个Wix项目要求的参考/信息。 - abbottdev

10
Wix/Bundle 元素是一个 Bootstrapper 项目的根元素,它不会放在与 Product.wxs 相同的项目中。在 Visual Studio 中,有一个用于新建 Wix Bootstrapper 项目的模板。你很可能还没有创建这种项目。
然后在你的 Bundle 的 Chain 中,你需要包含 .NET 和你的应用程序的 MSI,就像示例中一样。要使用 NetFx40Web,你必须引用 WixNetfxExtension。引用其他 Wix 项目的 Wix 项目具有预定义变量,所以你可以使用它们的属性,如 TargetPath。该示例假定此 Bootstrapper 项目引用了名为 MyApplicationSetup 的设置项目。
<Chain>
    <PackageGroupRef Id="NetFx40Web"/>
    <MsiPackage Id="MyApplication" SourceFile="$(var.MyApplicationSetup.TargetPath)"/>
</Chain>

我不确定这一点。这个Wix网站暗示Redist是完整的独立安装程序,而Web则是用于Web安装程序。http://wix.sourceforge.net/manual-wix3/wixnetfxextension.htm - Stealth Rabbi
我不理解的是,当我构建引用NetFx软件包组和我的MSI的启动程序项目时,它可以构建成功,但是我的启动程序项目的输出目录仅包含要安装的松散文件,而没有MSI和NET FX安装程序可执行文件。 - Stealth Rabbi
@StealthRabbi 输出将包含引导程序和松散文件,这就是您部署所需的全部内容。它不会包含被压缩的软件包文件(意味着它们存储在引导程序内部)以及安装时下载的文件。 - Tom Blodget
1
@TomBlodget,您能解释一下在表达式 SourceFile ="$(var.MyApplicationSetup.TargetPath)" 中的 MyApplicationSetup 是什么吗?它具体是什么的ID或名称?您正在讨论项目引用。这两个项目应该如何编译:一起还是一个接一个地? - Boris
1
@Boris MyApplicationSetup 是 WiX 安装程序项目的名称(其中包含 Product.wxs 文件)。请参阅 项目引用,这也适用于引用设置项目的引导程序项目。 - Tom Blodget
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接