Wix打包系列(七) 添加系统必备组件的安装程序
我们知道在vs的打包工程中添加系统必备组件是一件很容易的事情,那么在wix中如何检测系统必备组件并在安装过程中安装这些组件。这里以.Net Framework组件作为必备组件为例:
7.1 检测.Net Framework 版本
步骤1:为安装项目添加WiX .NET extensions库的引用
如果是命令行方式使用wix,那么需要在candle和light的时候添加如下参数:
-ext WiXNetFxExtension
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension">
<PropertyRef Id="NETFRAMEWORK20"/>
“NETFRAMEWORK20”就是.NET Framework extensions 中预定义的.Net Framework 2.0的属性;如果需要检测中文语言包,那么还必须添加”NETFRAMEWORK20_ZH_CN_LANGPACK” 属性;查看所有现有版本的.NET Framework的Properties,可以翻阅wix 帮助文档。
我们可以在安装程序的启动条件中使用预定义的属性,从而判断系统是否安装指定的.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>
移除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 输入参数。对于必须为应用程序安装的每个必备组件,都应包含一个相应的项。
如果 BootstrapperItems 和 ApplicationFile 参数均未指定,则会导致生成错误。
步骤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目录下,这里根据实际生成目录的结构填写不同的路径
HomeSite:指示必备组件由组件供应商托管。
Relative:指示必备组件与应用程序在同一个位置。
Absolute:指示所有组件都将在一个集中的 URL 下找到。该值应当与 ComponentsUrl 输入参数结合使用,ComponentsUrl 指定包含安装必备组件的 URL。
如果未指定 ComponentsLocation,将默认使用 HomeSite。
在General选项卡中输入生成安装文件的名称Name,选择要安装的文件Installer。
8、接着点击Package选项卡,选择.net Framework 2.0 和USBKey Driver

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

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

这里制作的USBKey Driver必备程序并没有设置启动条件和检查,也就是说不管机器上有没装这个驱动,都会执行驱动安装程序,要设置启动条件和检查,可以在第5步中设置相关的属性,具体可参考bmg帮助文档
Wix打包系列(七) 添加系统必备组件的安装程序的更多相关文章
- Wix打包系列 (六)制作升级和补丁包
原文:Wix打包系列 (六)制作升级和补丁包 前面我们已经知道怎么制作一个完整安装包了,但我们的软件往往不能一次性就满足客户的需要,当客户需要我们给软件进行升级的时候,我们应该怎么做呢? 在这之前,我 ...
- Wix打包系列(一)如何使用wix制作安装程序
原文:Wix打包系列(一)如何使用wix制作安装程序 最近由于项目需要,需要给客户制作安装程序,一开始使用vs2005自带的打包工程来打包,但用了一段时间发现vs打包太死板,而且使用起来问题很多.收费 ...
- Wix打包系列(五) 部署数据库
原文:Wix打包系列(五) 部署数据库 很多人在使用vs进行打包的时候,经常会为数据库部署的问题犯愁,即便是重写Installer类的方法,也不是很可靠方便,下面我们来看看在wix中如何部署数据库. ...
- Wix打包系列(四) 自定义UI
原文:Wix打包系列(四) 自定义UI 除了标准的安装界面,如果我们要在安装时需要提供一些额外的信息时,这时就需要自定义界面来显示和录入这些信息. 4.1 自定义对话框 如上一章中我们测试数据库的连 ...
- Wix打包系列(三)自定义Action(Custom Action)
原文:Wix打包系列(三)自定义Action(Custom Action) 3.1 关于Action 我们已经知道如何生成具有标准安装界面的安装程序了,Windows Installer按照我们的界面 ...
- Wix打包系列(二)用户界面和本地化操作
原文:Wix打包系列(二)用户界面和本地化操作 上一章节,我们已经大概知道如何对文件进行打包安装,不过我们也注意到,通过对Sample.wxs的编译链接,生成的msi安装包没有任何用户界面,只有一个安 ...
- VS报:"dll标记为系统必备组件,必须对其进行强签名"错误
问题: VS生成程序时,报“要将程序集“XX.dll”标记为系统必备组件,必须对其进行强签名.”错误. 解决方法: 1)在报错的解决方案中找到一个可以发布的项目(引用该XX.dll的项目未必可以发布) ...
- warning MSB3162: 所选的“Microsoft Report Viewer 2012 Runtime”项需要“Microsoft.SqlServer.SQLSysClrTypes.11.0”。在“系统必备”对话框中选择缺少的系统必备组件,或者为缺少的系统必备组件创建引导程序包。
warning MSB3162: 所选的“Microsoft Report Viewer 2012 Runtime”项需要“Microsoft.SqlServer.SQLSysClrTypes.11. ...
- 错误: 安装必备组件失败: 安装必备组件失败: SqlInstanceRtc 有关详细信息
错误: 安装必备组件失败: 安装必备组件失败: SqlInstanceRtc 有关详细信息 查看错误得知是安装sqlexpr_x64.exe的时候出现了错误 解决: 通过打开skype镜像,找到sql ...
随机推荐
- jquery mobile自己定义webapp开发实例(一)——前言篇
用jquery mobile做了一段时间的webapp开发,准备用自己的一个小demo做一个模块化的分享 点击demo演示 手机演示二维码: 此demo已经是比較老的版本号,用户体验流畅度确实还存在非 ...
- css3动画与js动画的一些理解
http://zencode.in/19.CSS-vs-JS%E5%8A%A8%E7%94%BB%EF%BC%9A%E8%B0%81%E6%9B%B4%E5%BF%AB%EF%BC%9F.html 首 ...
- 一些关于Console的API函数
SetConsoleCtrlHandlerGenerateConsoleCtrlEventSetConsoleMode ReadConsole WriteConsole SetConsoleCP Se ...
- jquery mobile实现拨打电话功能的几种方法
3.使用wtai协议进行拨打电话. 在wml中可以调用设备的wtai函数来呼叫特定的电话号码.目前,越来越多的浏览器都支持这个功能,但还不是所有. 代码如下所示: 复制代码 代码如下: <inp ...
- 制作openstack用的centos6.5镜像
目的: 在centos6.5操作系统环境下制作一个centos6.5的kvm镜像,安装cloud-init,能自己主动扩展根分区 一.制作环境: 操作环境是在openstack平台开一个实例.装的是c ...
- CTreeCtrl结点拖动实现(与后台联动)
原帖及讨论:http://bbs.bccn.net/thread-211413-1-1.html 效果描述:鼠标点击并拖动某一结点可以把它以动到其他结点下.原理:把一个结点机器下面的所有结点在需要释放 ...
- CImageList使用简要说明
CImageList ImageList;//创建一个包含3个24位色32x32图片的ImageList,ILC_MASK的意思是同时创建一个mask,这样在下面指定了背景颜色以后ImageList就 ...
- POJ 2442 Squence (STL heap)
题意: 给你n*m的矩阵,然后每行取一个元素,组成一个包含n个元素的序列,一共有n^m种序列, 让你求出序列和最小的前n个序列的序列和. 解题思路: 1.将第一序列读入seq1向量中,并按升序排序. ...
- Oauth认证的时候报错:timestamp_refused
今天server大规模报错,大部分用户无法登陆,小部分能够登陆,非常是奇怪. 查看log.调试代码,发现问题是在oauth认证的时候出了问题,报 timestamp_refused. google了下 ...
- 超声波模块SRF05
//////////////////////////////////////////////////////////////////////////////// // // PIC16F877 ...