前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Wix 安装部署(五) Bootstrapper 捆绑安装

Wix 安装部署(五) Bootstrapper 捆绑安装

作者头像
全栈程序员站长
发布于 2022-09-09 06:38:02
发布于 2022-09-09 06:38:02
1.3K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

原文: Wix 安装部署(五) Bootstrapper 捆绑安装

Wix的xml配置确实很费劲,忍不住有点像吐槽一下,前四篇完成的功能在Windows Installer中通过配置能很快的弄出来。可惜有很多加了锁的功能在InstallShield Limited Edition 版本中是用不了的。 但基本满足安装需求了。按照这个目录(下图)一个一个去配,配出来的也像样了(这里就不说了)。但是无法定制行为,以及打补丁等。wix又是一个极端,完全依赖xml。这两天想解决自动检测.net framework版本没有就自动安装的功能和注册dll的就很费劲。 在Windows Installer中分别在Redistributables和Registry中设置就行了,特别是注册,可以直接把目录从你自己的电脑上拖过来。但今天要讲的,就是wix中的Bootstrapper 项目,制作一个捆绑安装程序,也是Windows Installer中没有的。将多个需要安装的文件,按照顺序一次性装完。

一、Bootstrapper 初识

起因:wix的Setup 项目是无法自动安装.net framework的,必须要通过bootstrapper 应用程序去驱动wix中的Burn引擎来安装。在wix中只能判断有无合适的版本再终止安装。前提是要引入WixNetFxExtension.dll。xml代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  <PropertyRef Id="NETFRAMEWORK40FULL"/>
    <Condition Message="This application requires .NET Framework 4.0"> <![CDATA[Installed OR NETFRAMEWORK40FULL]]> </Condition>

所以需要新建一个bootstrapper 项目

会生成一个Bundle的wxs文件 支持四种文件格式

  • <MsiPackage>
  • <ExePackage>
  • <MspPackage>
  • <MsuPackage>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Bundle Name="Bootstrapper1" Version="1.0.0.0" Manufacturer="" UpgradeCode="dcf1682c-0a71-460f-9179-793a502c444b">
        <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" />

        <Chain>
            <!-- TODO: Define the list of chained packages. -->
            <!-- <MsiPackage SourceFile="path\to\your.msi" /> -->
        </Chain>
    </Bundle>
</Wix>

View Code

二、如何捆绑

目的:检测.net版本,没有匹配的就自动安装,然后再安装我们自己的工程。

1.先在Bootstrapper工程中引用WixNetFxExtension.dll 这个动态链接库中 已经包含了各种.net 版本

2.在Chain 元素中添加安装清单。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 <Chain>
      <PackageGroupRef Id="NetFx40Web"/>
      <MsiPackage Id="Scada" SourceFile="D:\VS2012\SCADASetup\SCADASetup\bin\Debug\SCADASetup.msi"></MsiPackage>
    </Chain>

这里PackageGroupRef Id的意思就是没有.Net Framework4.0就从web上下载了安装,当然你如果安装了4.5,这个是向下兼容的,不会再给你装一个4.0。其他版本的如下所示:

NetFx40Web

.Net Framework 4.0 Full web setup.

NetFx40Redist

.Net Framework 4.0 Full standalone setup.

NetFx40ClientWeb

.Net Framework 4.0 Client Profile web setup.

NetFx40ClientRedist

.Net Framework 4.0 Client Profile standalone setup.

NetFx45Web

.Net Framework 4.5 web setup.

NetFx45Redist

.Net Framework 4.5 standalone setup.

这里的MsiPackage就是我们自己的打包工程,会在.net版本确定之后安装,且地址对就行了,没有必要复制到根目录下,生成的时候他会自动一个exe安装文件。 但是 所以在Bootstrapper中的安装程序都是没有窗口的。安装顺序一个个默默的装完,没有上一步,下一步。和Click Once部署的一样。一次性装完。

如果要让MSI安装文件显示界面,要设置属性DisplayInternalUI为yes 就可以看展示出界面了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   <PackageGroupRef Id="NetFx40Web"/>
      <MsiPackage SourceFile="$(var.MSIPath)SCADASetupWix.msi"  DisplayInternalUI="yes"    />

3.安装文件设置。

上面就是一个简单的捆绑安装程序了,我们还可以进一步配置。 可以现在Fragment元素中把文件先设置好,在加入到链表中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:bal="http://schemas.microsoft.com/wix/BalExtension" 
       xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension"
         xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
  <Bundle Name="DIAView" Version="1.0.0.0" Manufacturer="Delta" UpgradeCode="87714fb5-9cdb-4323-af55-821c05974378" IconSourceFile="$(var.Photoes)diaapp.ico"  Compressed="yes" >
    <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense"   >
      <bal:WixStandardBootstrapperApplication LicenseFile="$(var.Photoes)license.rtf"   LogoFile="$(var.Photoes)dialogo.jpg"     />
    </BootstrapperApplicationRef>

    <!--<BootstrapperApplicationRef Id="ManagedBootstrapperApplicationHost"> IconSourceFile="$(var.Photoes)diaapp.ico"
      <bal:WixStandardBootstrapperApplication LicenseFile="$(var.Photoes)license.rtf"  LogoFile="$(var.Photoes)scon.ico"  />
    </BootstrapperApplicationRef>-->

    <Chain>
      <!--<PackageGroupRef Id="NetFx40Web"  />-->
      <PackageGroupRef Id="Netfx4Full"  />
      <MsiPackage Id="DIAView" SourceFile="$(var.Dia)DIAViewSetUp.msi" Compressed="no"  DisplayInternalUI="yes"/>
    </Chain>
  </Bundle>

  <Fragment>
    <!--<PackageGroup Id="Netfx4Full">
      <ExePackage Id="Netfx4Full" Cache="no" Compressed="no" PerMachine="yes" Permanent="yes" Vital="yes" InstallCommand="/q"
          SourceFile="$(var.Dia)dotNetFx40_Full_x86_x64.exe"
          DetectCondition="(Netfx4FullVersion=&quot;4.0.30319&quot;) AND (NOT VersionNT64 OR (Netfx4x64FullVersion=&quot;4.0.30319&quot;))"
                DownloadUrl="http://go.microsoft.com/fwlink/?LinkId=164193"
            InstallCondition="(VersionNT >= v5.1 OR VersionNT64 >= v5.1) AND (NOT (Netfx4FullVersion=&quot;4.0.30319&quot; OR Netfx4x64FullVersion=&quot;4.0.30319&quot;))"/>
    </PackageGroup>-->
     <util:RegistrySearchRef Id="NETFRAMEWORK40"/>
  <PackageGroup
            Id="Netfx4Full">
            <ExePackage
                Id="Netfx4FullExe"
                Cache="no"
                Compressed="no"
                PerMachine="yes"
                Permanent="yes"
                Vital="yes"
                SourceFile="$(var.Dia)dotNetFx40_Full_x86_x64.exe"
                InstallCommand="/q /norestart "
                DetectCondition="NETFRAMEWORK40"
                DownloadUrl="http://go.microsoft.com/fwlink/?LinkId=164193"/>
        </PackageGroup>
  </Fragment>
</Wix>

(注释部分的检测.net4.0有问题,每次都会装一次.net4.0 甚至会在32位系统中造成重启。)

ExePackage 就是专门针对exe文件,MsiPackage正对msi文件,其他以此类推。说几个重要的属性:Compress=“yes” 表示是压缩,no的话,debug中这个安装包就会独立出来,全部是yes的话最终就一个exe文件。

Permanent=”yes” 表示如果是卸载的话,这个文件会保留,为no的话,用户卸载的时候会一起卸载掉。VersionNT 变量代表系统,5.1指的是xp

4.判断是否注册。

我们用RegistrySearch来搜索注册表,切可以制定检测顺序

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
         xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
      <Fragment>
        <util:RegistrySearch Id="Path"
            Variable="UniqueId"
            Root="HKLM,SOFTWARE\Microsoft\MyProduct\Unique Id\"
            Key="Product"
            Result="Value" />
        <util:RegistrySearch 
            Variable="patchLevel"
            Root="HKLM,SOFTWARE\Microsoft\MyProduct\[UniqueId]\Setup"
            Key="PatchLevel"
            Result="Exists" 
            After="Path" />
      </Fragment>
    </Wix>

这里的表示的就是在执行Path之后在执行第二个注册表搜索,且结果你存储在Variable中的,而这个Variable就可以作为,是否安装的一个条件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   <ExePackage 
            SourceFile="[sources]\packages\shared\MyPackage.exe"
            DownloadURL="http://mywebdomain.com/?mypackage.exe
            InstallCommand="/q /ACTION=Install"
            RepairCommand="/q ACTION=Repair /hideconsole"
            UninstallCommand="/q ACTION=Uninstall /hideconsole "
            InstallCondition="x86 = 1 AND OSVersion >= v5.0.5121.0 AND patchLevel = 0" />
        </PackageGroup>

这种一次性安装的方式还是觉得不太好,有些强制性。这里只做个简单的参照。

很多PC软件都是可以自动检测版本,下载更新,VS自带的ClickOnce也可以运行前自己动检测,发现新版本会去提示下载更新,需要借助一个发布网站就行。但那个可配置性就更 低了。应该还有其他的方法,求路过大侠指点一二。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/162186.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
用 WiX 制作安装包:为 WiX 制作的 exe 安装包添加 .NET Framework 前置的安装步骤
本文是 WiX Toolset 安装包制作入门教程 系列中的一篇,可前往阅读完整教程。
walterlv
2023/10/22
9120
用 WiX 制作安装包:为 WiX 制作的 exe 安装包添加 .NET Framework 前置的安装步骤
使用WIX 进行商业智能OEM打包
WIX软件打包肯定多很多同学也都不陌生,但如何使用WIX对数据可视化大屏进行OEM打包,有很多同学不太清楚具体过程,今天这里就为大家介绍一下,关于如何用WIX打包工具完成对Wyn安装包的打包。 1.阅读帮助文档 OEM流程与示例 2.在官网(https://wixtoolset.org/)下载WiX Toolset build tools 进行安装,点击 Install 进行安装
葡萄城控件
2022/10/04
7370
使用WIX 进行商业智能OEM打包
用 WiX 制作安装包:制作 WPF 安装包界面(入门篇)
本文是 WiX Toolset 安装包制作入门教程 系列中的一篇,可前往阅读完整教程。
walterlv
2023/10/23
1.1K0
用 WiX 制作安装包:制作 WPF 安装包界面(入门篇)
用 WiX 制作安装包:创建一个简单的 exe 安装包
本文是 WiX Toolset 安装包制作入门教程 系列中的一篇,可前往阅读完整教程。
walterlv
2023/10/23
1.5K0
用 WiX 制作安装包:创建一个简单的 exe 安装包
用Wix制作VSPackage的安装包
做完VSPackage后,如何打包发布它?其实有很多种打包的方式,在这里我只介绍在VS2008下用Wix制作VSPackage的安装程序。您首先要下载并安装Wix toolset(http://wix.codeplex.com/)。
明年我18
2019/09/18
2.5K0
用Wix制作VSPackage的安装包
用 WiX 制作安装包:为 WiX 制作的 msi 安装包添加 .NET Framework 环境检查
本文是 WiX Toolset 安装包制作入门教程 系列中的一篇,可前往阅读完整教程。
walterlv
2023/10/22
1.3K0
用 WiX 制作安装包:为 WiX 制作的 msi 安装包添加 .NET Framework 环境检查
用 WiX 制作安装包:创建一个简单的 msi 安装包
本文是 WiX Toolset 安装包制作入门教程 系列中的一篇,可前往阅读完整教程。
walterlv
2023/10/22
2.2K0
用 WiX 制作安装包:创建一个简单的 msi 安装包
用 WiX 制作安装包:设置的 .NET Framework 前置会始终安装,即使目标电脑已经自带或装好
使用 WiX 的 Burn 引擎制作自定义托管引导程序的 exe 安装包时,你可能会遇到这种情况:明明目标电脑上已经装好了 .NET Framework,但无论如何就是会提示安装,始终不启动自定义的安装界面。
walterlv
2023/10/23
5010
用 WiX 制作安装包:设置的 .NET Framework 前置会始终安装,即使目标电脑已经自带或装好
WiX Toolset 安装包制作入门教程(目录篇)
WiX 全称为 Windows Installer XML,是使用 XML 文件创建 Windows 安装程序的一组工具集。它开源且完全免费。
walterlv
2023/10/23
3.7K0
​monosys as 1ddlang语言选型+1ddcodebase实践选型绿色monodevelope集成常见多语言
本文关键字:.net上 都有什么语言,最后一个支持xp的mono,绿色版monodevelop,绿色xamrin studio,mingwsys vs monosys,gtk#绿色版,让monodevelop在mono下启动,以mono为运行时启动,green mono,绿色打包mono应用免.netfx发布
minlearn
2020/09/27
6980
用 WiX 制作安装包:安装 WiX Toolset 工具集
本文是 WiX Toolset 安装包制作入门教程 系列中的首篇,可前往阅读完整教程。
walterlv
2023/10/22
2.9K0
用 WiX 制作安装包:安装 WiX Toolset 工具集
无需安装 VS2019,在 Visual Studio 2022 中编译 .NET Framework 4.5/4/3.5 这样的古老框架
Visual Studio 2022 已正式发布!着急升级的小伙伴兴致勃勃地升级并卸载了原来的 Visual Studio 2019 后,发现自己的几个库项目竟然无法编译通过了。究其原因,是因为我的一些库依旧在支持古老的 .NET Framework 4.5 框架,而 Visual Studio 2022 不再附带如此古老的目标包了。
walterlv
2023/10/23
1.9K0
无需安装 VS2019,在 Visual Studio 2022 中编译 .NET Framework 4.5/4/3.5 这样的古老框架
使用WiX制作简单MSI安装程序
WiX完全用xml描述,使用命令行来生成。只要用任何一个文本编辑器就可以了。但是为了开发效率,我们还是借助于辅助工具比较好。是一般使用的工具是两个:一个Visual Studio插件,在WiX的安装包里面附带,另一个就是WiXEdit,WixEdit是编辑的XMLXML的源代码的图形化工具箱.WixEdit会让你创造体制条件与MSI和MSM测试wix工具箱.它提供了直观的、轻松的对话方式编辑wix文件来源。 下载和安装 1、下载Wix 3.0版本,目前还是beta。但是已经足够稳定了,可以应用于生产环境。
张善友
2018/01/19
3.7K0
使用WiX制作简单MSI安装程序
WiX安装选项---开始菜单项
参考文档: How To: Create a Shortcut on the Start Menu,How To: Create an Uninstall Shortcut 制作的安装程序安装后,都要
张善友
2018/01/19
1.2K0
WiX v3.0 RC 2
2009年4月18日发布的Wix RC2(v3.0.5217.0),就意味着Wix v3.0RTM将要到来。Visual Studio 2010将会配备WiX 3.5,SharpDevelop 3.0中已经即成了Wix 3.0.4917.0。 我们都习惯了安装程序有个向导,一步一步的进行。不过默认生成的向导——比如我用的这个【WxUI install dir】——界面文字是英文的,我们当然希望是中文的。wix 提供了中文的资源文件。在使用light.exe链接时,增加命令行参数 -loc xxx.wxl 即
张善友
2018/01/29
7700
Inno Setup检测软件依赖环境是否安装
从 Visual Studio .NET 到 Visual Studio 2013,C++ 编译器和工具的每个主版本都包含一个新的独立版本的 Microsoft C 运行 (CRT) 库。 CRT 的这些独立版本彼此独立,并在不同程度上彼此不兼容。 例如,Visual Studio 2012 使用的 CRT 库是第 11 版,名为 msvcr110.dll,而 Visual Studio 2013 使用的 CRT 是第 12 版,名为 msvcr120.dll。 从 Visual Studio 2015 开始,不再是这样。 Visual Studio 2015 及更高版本的 Visual Studio 都使用一个通用 CRT。
码客说
2021/07/19
2.3K0
Inno Setup检测软件依赖环境是否安装
使用 LINQ to XML,.NET 让生成 XML 文件变得和直接写 XML 一样轻松
2018-06-26 03:26
walterlv
2018/09/18
1.3K0
windows命令执行防御规避总结
通过sip劫持对恶意代码签名获得系统信任https://github.com/secretsquirrel/SigThief
drunk_kk
2021/11/12
7870
使用 Hosting 构建 WPF 程序 - Stylet 篇
.NET Generic Host 是一个通用的应该程序构建方式,不只是适用于 asp.net core,可以用在任何 .NET 项目中。
jgrass
2024/12/25
750
(1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
发布于 2018-07-25 01:27 更新于 2018-07-26 23:23
walterlv
2018/09/18
1.4K0
(1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
推荐阅读
相关推荐
用 WiX 制作安装包:为 WiX 制作的 exe 安装包添加 .NET Framework 前置的安装步骤
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档