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

Wix 安装部署(五) Bootstrapper 捆绑安装原文:Wix安装部署(五)Bootstrapper捆绑安装   Wix的xml配置确实很费劲,忍不住有点像吐槽一下,前四篇完成的功能在WindowsInstaller中通过配置能很快的弄出来。可惜有很多加了锁的功能在InstallShieldLimitedEdition版本中是用不了的。但基本满足安装需求了。按照这个目录(下图)一个一个去配,配出来的也像样了(这里就不说了)。…

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

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

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

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

一、Bootstrapper 初识 

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

  <PropertyRef Id="NETFRAMEWORK40FULL"/>
    <Condition Message="This application requires .NET Framework 4.0"> <![CDATA[Installed OR NETFRAMEWORK40FULL]]> </Condition>

    所以需要新建一个bootstrapper 项目

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

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

  • <MsiPackage>
  • <ExePackage>
  • <MspPackage>
  • <MsuPackage>
Wix 安装部署(五) Bootstrapper 捆绑安装
Wix 安装部署(五) Bootstrapper 捆绑安装

<?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 元素中添加安装清单。

 <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部署的一样。一次性装完。

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

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

   <PackageGroupRef Id="NetFx40Web"/>
      <MsiPackage SourceFile="$(var.MSIPath)SCADASetupWix.msi"  DisplayInternalUI="yes"    />

 

  3.安装文件设置。

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

 

<?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文件。

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

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

4.判断是否注册。 

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

    <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就可以作为,是否安装的一个条件。

   <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.net/162186.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Alex 的 Hadoop 菜鸟教程: 第10课 Hive 安装和使用教程

    Alex 的 Hadoop 菜鸟教程: 第10课 Hive 安装和使用教程Hive提供了一个让大家可以使用sql去查询数据的途径。让大家可以在hadoop上写sql语句。但是最好不要拿Hive进行实时的查询。因为Hive的实现原理是把sql语句转化为多个MapReduce任务所以Hive非常慢,官方文档说Hive适用于高延时性的场景而且很费资源。

    2022年6月7日
    94
  • net开发高级面试题2021_net面试题2021

    net开发高级面试题2021_net面试题2021文章目录1.NET/dotnetcore/.NETframework的关系2.corefx,coreclr都是什么?3.asp.netcore3.1Kestrel3.2asp.netcore主要的特性3.3startupclass的作用?3.4Startupclass的configservice方法有什么作用?3.5startupclass的configure方法有什么作用?3.6什么是metapackages?3.7什么是中间件?3.8application

    2022年8月29日
    4
  • 损失函数与代价函数区别

    损失函数与代价函数区别各种损失函数的优缺点详解损失函数或者代价函数的目的是:衡量模型的预测能力的好坏。损失函数(Lossfunction):是定义在单个训练样本上的,也就是就算一个样本的误差,比如我们想要分类,就是预测的类别和实际类别的区别,是一个样本的哦,用L表示。代价函数(Costfunction):是定义在整个训练集上面的,也就是所有样本的误差的总和的平均,也就是损失函数的总和的平均,有没有这个平…

    2022年5月12日
    56
  • Pytest(6)重复运行用例pytest-repeat

    Pytest(6)重复运行用例pytest-repeat前言平常在做功能测试的时候,经常会遇到某个模块不稳定,偶然会出现一些bug,对于这种问题我们会针对此用例反复执行多次,最终复现出问题来。自动化运行用例时候,也会出现偶然的bug,可以针对单个用例,

    2022年8月6日
    2
  • microsoft visual studio最新版本_visual studio 2019下载安装教程

    microsoft visual studio最新版本_visual studio 2019下载安装教程微软已经向MSDN订阅用户提供了VisualStudio2013正式版镜像下载,不过非MSDN用户可以在微软的VisualStudio2013官方网站上下载到正式版镜像(通过下载专业版本,已验证与MSDN版本一致)。下面为大家整理一下个版本下载地址。MicrosoftVisualStudioUltimate2013(简体中文旗舰版)文件名: cn_visual_st

    2022年9月3日
    3
  • Python3取余不等于0(巨坑)[通俗易懂]

    Python3取余不等于0(巨坑)[通俗易懂]这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好!这是你第一次使用Markdown编辑器所展示的欢迎页。如果你想学习如何使用Mar

    2022年4月25日
    85

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号