使用WIX3.6和Burn安装.NET Framework 3.5 SP1

5
我正在尝试使用Burn和WIX 3.6为我的应用程序创建安装程序。该安装程序必须能够从Microsoft的网站安装.NET 3.5 SP1。 我正在使用先前已安装.NET 3.5 SP1的目标机器上创建的可工作WIX项目。如果目标机器上已经安装了.NET 3.5 SP1,则它可以正常工作。 第一步似乎是创建一个bundle,因此我在Product.wxs文件中添加了一个元素。当我这样做时,我会收到一个错误,指出该模式中无效的,必须使用。这是否意味着我必须将所有产品定义转移到片段中?不清楚如何操作。 然后事情变得更加复杂,因为WixNetfxExtension仅为.NET 4.0和4.5提供PackageRef。我还没有准备好将我的应用程序切换到该版本的框架。那么,我如何从Web源获取.NET 3.5 SP1并将其包含在我的bundle中? 是否有任何可行的示例可以参考?
1个回答

11

由于您的问题中并未清楚指出您要做什么,因此我将从头开始解释。

创建一个新的Wix Burn引导程序项目。这是安装依赖项并随后生成现有的Wix 3.5安装程序的地方。

下载.NET 3.5 SP1完整包,并记录用于下载的直接URL。

使用heat.exe(在wix 3.6 bin目录中)运行以下命令,将生成一个WXS文件,其中包含.NET安装程序的详细信息。

heat.exe payload [path_to_net_installer] -o [path_to_wxs]

这将在wxs中为你提供以下内容:

<RemotePayload CertificatePublicKey="F321408E7C51F8544B98E517D76A8334052E26E8"
               CertificateThumbprint="D57FAC60F1A8D34877AEB350E83F46F6EFC9E5F1" 
               Description=".NET Framework 3.5 Setup"
               Hash="3DCE66BAE0DD71284AC7A971BAED07030A186918" 
               ProductName=".NET Framework 3.5" 
               Size="242743296" 
               Version="3.5.30729.1" />
将以下代码添加到您的启动器项目中,作为ExePackage 元素的子级,并更新该元素以使用之前保存的下载 URL。这将自动下载 .NET 安装程序,或者您可以将其放置在启动器 exe 旁边,它会自动检测到。
Bundle中创建一个包含 .NET ExePackage 和您的安装程序的 MsiPackage 的chain。然后,您最终将得到类似以下内容的内容(我将留下许多必需属性供您填写!):
 <Bundle Name="$(var.SkuName)"
         Copyright="$(var.Copyright)"
         Manufacturer="$(var.Manufacturer)"
         Version="$(var.ProductVersion)"
         UpgradeCode="$(var.UpgradeCode)">
     <Chain>
         <ExePackage Id="dotNetFX3.5">
             <RemotePayload />
         </ExePackage>
         <MsiPackage Id="MyMsi" />
     </Chain>
  </Bundle>

编译后,您应该会得到一个包含msi文件的大型exe文件,或者如果您选择不压缩它,则会得到一个执行msi文件的exe文件(需要与msi文件放在同一文件夹中)。


2
非常感谢!我不确定是否需要多个WIX项目。文档在从基础到工作项目方面并不太清晰(而且我并没有尝试做什么特别复杂的事情,我想:使用3.5 SP1的.NET有什么难的,我只是想从微软的下载安装.NET)。无论如何,这就是我需要的提示! - Sam Dahan

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