Wix打包系列(七) 添加系统必备组件的安装程序

原文:Wix打包系列(七) 添加系统必备组件的安装程序

    我们知道在vs的打包工程中添加系统必备组件是一件很容易的事情,那么在wix中如何检测系统必备组件并在安装过程中安装这些组件。这里以.Net Framework组件作为必备组件为例:

   

    7.1 检测.Net Framework 版本

   

    步骤1:为安装项目添加WiX .NET extensions库的引用

    如果是命令行方式使用wix,那么需要在candle和light的时候添加如下参数:

-ext WiXNetFxExtension

    如果在vs中使用wix,那么需要添加WixNetFxExtension.dll的引用,在wix安装目录下可以找到它。

   

    步骤2:为安装项目添加WiX .NET extensions命名空间

    添加了.NET extensions引用之后,还必须为源文件添加.NET extensions 命名空间,方式是为Sample.wxs源文件中Wix元素添加如下属性:

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension">

   

    步骤3:引用适当版本的Property

    在.NET Framework extensions 已经定义了所有现有版本的.NET Framework的Property,包括service pack版本。如果我们需要在安装项目中使用这些属性,就必须使用引用它们;比如我们需要检测.Net Framework 2.0,就必须添加相应的Property引用:

<PropertyRef Id="NETFRAMEWORK20"/>

        “NETFRAMEWORK20”就是.NET Framework extensions 中预定义的.Net Framework 2.0的属性;如果需要检测中文语言包,那么还必须添加”NETFRAMEWORK20_ZH_CN_LANGPACK” 属性;查看所有现有版本的.NET Framework的Properties,可以翻阅wix 帮助文档。

  

    步骤4:在Condition条件中使用预定义的Properties

    我们可以在安装程序的启动条件中使用预定义的属性,从而判断系统是否安装指定的.NET Framework组件,如:

     

<Condition Message="This application requires .NET Framework 2.0. Please install the .NET Framework then run this installer again."><![CDATA[Installed OR NETFRAMEWORK20]]></Condition>

  

  上面代码意思是:如果没有安装.Net Framework 2.0, 将会中断安装程序执行,Installed 表示如果在修复或卸载安装时将不会检测.Net Framework组件。

   

   步骤5:编译生成安装程序

    在一个没有.Net Framework 2.0的系统环境中运行生成的安装程序,弹出提示安装.Net Framework 2.0的错误,然后安装程序被终止。

 

   

    现在我们的安装程序已经可以检测.Net Framework 2.0是否安装了,但是一般情况下,我们希望将.Net Framework组件作为安装程序的一部分,当检测到系统没有安装.Net Framework组件的时候会自动安装.Net Framework组件。windows installer不能将这些组件打包到我们安装程序中,但是我们可以跟vs打包一样,使用引导程序(bootstrapper)来实现,引导程序会先执行.Net Framework组件的安装,然后再执行我们的安装程序。下面我们提供2种方法,一种是编写xml代码的方式在Visual Studio中生成带引导程序的安装文件,另一种是使用BMG工具。

   

    7.2 使用Visual Studio制作系统必备引导程序

   

    wix本身不提供引导程序,但是我们可以使用Visual Studio中ClickOnce deployment部件提供的bootstrapper引导程序;下面我们来看看如何为.Net Framework组件生成ClickOnce 引导程序bootstrapper。

 

    步骤1:在Visual Studio中创建并编译wix安装项目

    要生车ClickOnce bootstrapper引导程序,我们不能再使用命令行模式,必须使用VS编译环境;在vs2005或以上版本,新建wix项目:

   移除Product.wxs,将Sample示例源文件拷贝到wix Project所在的目录,并添加到wix项目中;添加wix命名空间中的wix Extension组件的引用,如图:

    使用candle命令编译时,我们使用了变量参数-dVersion=1.0.0,这里同样需要设置,右键项目名称——》属性——》Build选项卡——》设置Build参数:

    最后编译生成Sample项目,生成的安装文件在../bin/Debug/zh-cn下,我们也可以在上面的Build参数中指定安装语言,也可以同时生成多种语言版本的安装程序。

 

   需要注意的是:在使用vs制作中文安装包时,如果引用了WixSqlExtension组件,那么就必须把SqlExtension的中文资源文件(点击下载)包括在项目中,否则会编译错误。而在命令行模式下制作中文安装包时,可以不使用SqlExtension中文资源文件,默认会使用自带的英文资源文件。

   

    步骤2: 用编辑器打开.wixproj文件

   首先,在vs中打开示例中的Sample项目,然后在解决方案管理器(Solution Explorer)中右键Sample项目,选择卸载项目Unload Project),继续在解决方案管理器(Solution Explorer)中右键Sample项目,选择编辑Sample.wixproj。

   

    步骤3: 添加必备组件的条目

    在Sample.wixproj文件的下添加如下代码:

  <ItemGroup><BootstrapperFile Include="Microsoft.Net.Framework.2.0"><ProductName>.NET Framework 2.0</ProductName></BootstrapperFile></ItemGroup>

    Include 特性用于表示应安装的必备组件的名称。ProductName 项元数据是可选的,它作为备用项供生成引擎在找不到包时用作用户友好名称。除非未指定 ApplicationFile,否则这些项不是必选 MSBuild 输入参数。对于必须为应用程序安装的每个必备组件,都应包含一个相应的项。

    如果 BootstrapperItemsApplicationFile 参数均未指定,则会导致生成错误。

   

    步骤4:添加生成引导程序的任务

    在Sample.wixproj文件中添加如下代码:

<Target Name="AfterBuild"><GenerateBootstrapper ApplicationFile="zh-cn/$(TargetFileName)" ApplicationName="Foobar 1.0" BootstrapperItems="@(BootstrapperFile)" ComponentsLocation="Relative" CopyComponents="True" OutputPath="$(OutputPath)" Path="E:/Program Files/Microsoft Visual Studio 8/SDK/v2.0/BootStrapper/" /></Target>

       ApplicationFile指定引导程序在所有必备组件安装完以后开始安装应用程序时使用的文件的路径;$(TargetFileName)是安装程序的名称,如果是制作中文安装包,wix安装工程默认生成的安装文件在输出目录下的zh-cn目录下,这里根据实际生成目录的结构填写不同的路径

    ApplicationName是在bootstrapper引导程序执行时显示的应用程序的名称;

    BootstrapperItems指定要生成到引导程序中的产品;

    ComponentsLocation指定引导程序寻找要安装的安装必备组件的位置。此参数可具有下列值:

  • HomeSite:指示必备组件由组件供应商托管。
  • Relative:指示必备组件与应用程序在同一个位置。
  • Absolute:指示所有组件都将在一个集中的 URL 下找到。该值应当与 ComponentsUrl 输入参数结合使用,ComponentsUrl 指定包含安装必备组件的 URL。

    如果未指定 ComponentsLocation,将默认使用 HomeSite

    CopyComponents如果为 true,则引导程序会将所有输出文件复制到 OutputPath 参数指定的路径。BootstrapperComponentFiles 参数的值都应当基于此路径。如果为 false,则不复制文件,而且 BootstrapperComponentFiles 值将基于 Path 参数的值。

    OutputPath指定 setup.exe 和所有包文件要复制到的位置,这里设置的目录是应用程序安装文件的输出目录。

    Path指定所有可用的必备组件包的位置,示例中的Path路径是对于安装了VS2005的用户而言的,如果是安装了VS2008的用户,则Path的值应该是:C:/Program Files/Microsoft SDKs/Windows/v6.0A/Bootstrapper

    更多属性,请参考http://msdn.microsoft.com/zh-cn/library/ms164294.aspx

   

    步骤5:生成安装程序

    保存修改后的Sample.wixproj文件,在解决方案管理器(Solution Explorer)中右键Sample项目,选择重新加载项目(Reload Project),在弹出窗口中选择“是”,然后生成项目。

   

    我们来看看效果,在没有.Net Framework 2.0的虚拟机中,运行setup.exe,会弹出安装.Net Framework 2.0的界面,如图:

    点击接受会开始安装.Net Framework 2.0组件,安装完.Net Framework 2.0后会自动安装Sample.msi。

   

   

    7.3 使用BMG工具制作自定义系统必备引导程序

   

    在使用ClickOnce发布时,vs自带了一个系统必备的列表(包括.Net Framework 和c++运行库等),列表中的必备程序我们是可以用上面的方法制作引导程序;但是这种方法只适用于将系统必备列表中的组件打包,而且需要编写一些xml代码,更好的方法是使用BMG(Bootstrapper Manifest Generator)工具,用它可以不用写任何代码为系统必备列表添加新的第三方组件,而且还可以为组件和安装程序创建引导程序。

   

    Visual studio2008版本的BMG工具可以到这个地址下载:http://code.msdn.microsoft.com/bmg/Release/ProjectReleases.aspx?ReleaseId=1567

   

    这里我用一个usb key的驱动程序作为安装必备程序的示例:

   

    1、下载安装BMG

   

    2、打开BMG,版本信息如下:

   

    3、点击菜单File—>New打开新建项目对话框,选择Package Manifest项目类型。在弹出的对话框中输入Project Name和Product Code;

   

    4、点击左上的Add Install File按钮,选择自定义必备程序所在的路径:

  

   

    5、点击OK,出现如下界面,输入Display Name,其他属性可以选填,然后点击Build生成

   

    6、在vs2008中我们就可以看到我们定义的系统必备程序:

   

    7、接着点击菜单—>New,项目类型选择MSBuild,点击OK后,出现如下界面:

    在General选项卡中输入生成安装文件的名称Name,选择要安装的文件Installer。

 

    8、接着点击Package选项卡,选择.net Framework 2.0 和USBKey Driver

   

    9、点击Build按钮,选择生成目录,确定后生成MSBuild项目,在输出目录下生成安装文件和引导程序如下:

   

    10、运行setup.exe安装引导程序,会出现安装USBKey Driver组件的界面,如下:

   

    这里制作的USBKey Driver必备程序并没有设置启动条件和检查,也就是说不管机器上有没装这个驱动,都会执行驱动安装程序,要设置启动条件和检查,可以在第5步中设置相关的属性,具体可参考bmg帮助文档

时间: 2024-08-23 16:30:27

Wix打包系列(七) 添加系统必备组件的安装程序的相关文章

Wix打包系列 (六)制作升级和补丁包

原文:Wix打包系列 (六)制作升级和补丁包     前面我们已经知道怎么制作一个完整安装包了,但我们的软件往往不能一次性就满足客户的需要,当客户需要我们给软件进行升级的时候,我们应该怎么做呢?       在这之前,我们有必要了解下Windows Installer中的Upgrades定义:       6.1 关于Windows Installer Upgrades       在Windows Installer中将软件产品的更新划分为3类: Small updates    它意味着安装

Wix打包系列(一)如何使用wix制作安装程序

原文:Wix打包系列(一)如何使用wix制作安装程序     最近由于项目需要,需要给客户制作安装程序,一开始使用vs2005自带的打包工程来打包,但用了一段时间发现vs打包太死板,而且使用起来问题很多.收费的商业打包工具不在我考虑范围内,于是在网上找到了wix,稍微了解了下,发现wix的确可以满足我的需求:但是网上wix中文的资料少的可怜,百度,google上搜索到关于wix中文的资料少的可怜,有的只是一些简单的应用,还不足以满足我的要求:没办法,只能靠自己了,还好项目不是很急,于是开始花时间

Wix打包系列(五) 部署数据库

原文:Wix打包系列(五) 部署数据库     很多人在使用vs进行打包的时候,经常会为数据库部署的问题犯愁,即便是重写Installer类的方法,也不是很可靠方便,下面我们来看看在wix中如何部署数据库.         5.1 创建数据库         wix包含数据库的相关链接库,需要为wix添加如下命名空间: <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util='http://schemas.

clickonce 安装时无法下载系统必备组件

问题描述 ]大侠急救:clickonce发布时选择了从与我的应用程序相同的位置下载系统必备组件发布成功后在本地可以成功安装,但部署到IIS上通过访问url来安装时却只把setup.exe下载到本地,所选的系统必备组件并没有下载导致无法安装.安装时的日志如下:请大家参考红色字体分析下原因,谢谢.Thefollowingpropertieshavebeenset:Property:[AdminUser]=true{boolean}Property:[InstallMode]=SameSite{str

Wix打包系列(四) 自定义UI

原文:Wix打包系列(四) 自定义UI     除了标准的安装界面,如果我们要在安装时需要提供一些额外的信息时,这时就需要自定义界面来显示和录入这些信息.         4.1  自定义对话框     如上一章中我们测试数据库的连接串在源文件中定义的,如果我们需要用户安装时输入数据库信息,就需要添加一个如图的对话框.     开始之前,我们先看看标准的WixUI_Mondo UI包含哪些对话框: 1: BrowseDlg 2: CustomizeDlg 3: DiskCostDlg 4: Li

Wix打包系列(三)自定义Action(Custom Action)

原文:Wix打包系列(三)自定义Action(Custom Action)    3.1 关于Action     我们已经知道如何生成具有标准安装界面的安装程序了,Windows Installer按照我们的界面设置使用标准的安装步骤进行安装,它的安装过程是由一系列标准的Action组成,通过这些Action来完成对计算机的安装配置:如果我们想自定义安装步骤或者在安装过程中执行自定义的操作,就需要使用自定义的Action.当然,使用Custom Action之前,我们应该先了解一下msi中这些

win8系统应用商店下载安装程序提示错误0x80200024解决办法

win8系统应用商店下载安装程序提示错误0x80200024解决办法   无法安装应用错误代码:0x80200024指的是服务器出现问题,错误代码:0x80080206指的是所下载的应用安装包已经损坏.如果是安装包被损坏主要是在下载应用时网络出现断开或无信号等等,导致下载的应用程序数据不完整 ,因此应用程序无法进行安装. 解决方法: 1.我们可以下载微软所提供的应用的疑难解答工具,点击下载>>微软疑难解答工具,在打开后可以对系统进行检测,打开后如下图,选择Windows商店应用并按下一步来进行

SharePoint 2016 必备组件离线安装介绍

前言 SharePoint 必备组件安装,一直以来都是SharePoint安装过程中的最大的坑,尤其是不能联网的服务器.博主在这里简单介绍一下离线安装过程,并附组件包下载以及安装命令,并且在windows server 2016中亲测可用,其他版本服务器请自行测试. 1.组件介绍: • Web Server (IIS) Role • Microsoft SQL Server 2012 Native Client • Microsoft ODBC Driver 11 for SQL Server

vs2008 安装部署项目遇到系统必备安装后重启问题

问题描述 VS2008中,开发一个很简单的helloworldwinform程序,在安装部署中的系统必备,选中windowsinstaller3.1.netframework3.5从与我的应用程序相同的位置下载系统必备组件.生成的debug文件夹有:DotNetFX35文件夹WindowsInstaller3_1文件夹setup.exeSetup.msi安装framework3.5之后重新启动计算机重启后自动运行安装程序,但是却出错了提示为:无法找到应用程序文件"Setup.msi".