我正在尝试使用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?
在任何地方都有这样做的工作示例吗?
答案 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(它需要在同一个文件夹中)。