使用WIX3.6与Burn一起安装.NET Framework 3.5 SP1

时间:2012-09-27 19:43:59

标签: .net-3.5 wix burn

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

在任何地方都有这样做的工作示例吗?

1 个答案:

答案 0 :(得分:11)

在你的问题中你不清楚你在做什么,所以我会从头开始。

创建一个新的Wix刻录引导程序项目。这是安装依赖项的地方,然后将生成现有的Wix 3.5安装程序。

下载.net 3.5 SP1完整软件包,并记下用于下载它的直接网址。

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

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

this.will会在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安装程序,或者您可以将它放在bootstrapper exe旁边,它会检测到它。

chain中创建一个Bundle,其中包含.net ExePackage和安装程序的MsiPackage。然后你会得到一些类似的东西(很多必要的属性我会留下你填写!):

 <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(它需要在同一个文件夹中)。