WIX配置-打包文件

????自从把开发环境从VS2010升到VS2012后,一直存在一个困扰的问题-制作安装包。开发时需要使用VS2012,打包软件时却使用VS2010。使用不方便,希望能够寻找一个在VS下能够使用,并且方便做持续集成的打包工具。先研究VS2012自带的InstallShield发现是一个坑,居然是一个有限制的第三方工具,高级版本还需要收费。后来在度娘的帮助下发现了WIX(Windows Install XML),经过初步研究能够满足需求。于是从下载Wix3.9开始配置之旅。

添加文件到安装包

对于一个安装包的制作其中一项最主要的哪些文件需要被包含和被组织在什么样的目录中。下面将依次介绍该配置过程。

第一步:定义目录结构

????安装程序时一般是把一些文件拷贝到磁盘上的一些目录中。为了提高WIX文件的可读性,推荐单独定义文件目录。使用<Directory>元素定义文件目录。在WIX文件中<Directory>可以被包含在Directory, DirectoryRef, Fragment, Module, Product中,其子集元素可以为Component、Directory、Merge、SymbolPath。下面是一个程序的安装目录的示例:

????<Directory
Id="TARGETDIR"
Name="SourceDir">

<Directory
Id="ProgramFilesFolder">

<Directory
Id="APPLICATIONROOTDIRECTORY"
Name="MyApplication
"/>

</Directory>

</Directory>

作为安装程序来讲,第一个安装目录的Id必须为"TARGETDIR"。

第二个目录Id为"ProgramFilesFolder"一般指向的是"c:\Program Files\"。

第三个目录Id为"APPLICATIONROOTDIRECTORY"或其他自定义全大写的字符串,在WIX文件中的其他地方将会被使用。Name为MyApplication,安装后目录就会为"c:\Program Files\MyApplication"。

第二步:添加文件到安装包

????文件目录定义好后文需要把必要的文件添加到安装包中。这儿主要是通过DirectoryRef、Component、File三个元素实现,以下文一个简单的示例:

<DirectoryRef
Id="APPLICATIONROOTDIRECTORY">

<Component
Id="WindowsFormsApplication.exe"
Guid="4039b7c2-b7be-48fe-b082-231215c34412">

<File
Id="WindowsFormsApplication.exe"
Source="MySourceFiles\WindowsFormsApplication.exe"
KeyPath="yes"
Checksum="yes"/>

</Component>

<Directory
Id="Files"
Name="Files">

<Component
Id="noimage1.jpg"
Guid="4030b7c2-b7be-48fe-b282-231215cb8812">

<File
Id="noimage1.jpg"
Source="MySourceFiles\files\noimage1.jpg"
KeyPath="yes"/>

</Component>

<Component
Id="noimage.jpg"
Guid="4030b7c2-b98e-48fe-b282-231215cb8412">

<File
Id="noimage.jpg"
Source="MySourceFiles\files\noimage.jpg"
KeyPath="yes"/>

</Component>

</Directory>

</DirectoryRef>

DirectoryRef的Id为第一步中定义APPLICATIONROOTDIRECTORY;

Component中id必须唯一,必须包含唯一的guid,其下只能有一个File元素;

File的id需要唯一,Source可以为绝对路径或对于wxs的相对路径,必须包含KeyPath="yes",如果为文件为可执行文件还需要包含Checksum="yes";

第三步:把文件添加到安装队列中

????由于安装文件可能会比较多,一般可以把其组织到一个当独的ComponentGroup中,再把ComponentGroup添加到Feature中,示例如下:

<ComponentGroup
Id="ProductComponents"
Directory="APPLICATIONROOTDIRECTORY">

<ComponentRef
Id="WindowsFormsApplication.exe"/>

<ComponentRef
Id="noimage1.jpg"/>

<ComponentRef
Id="noimage.jpg"/>

????????</ComponentGroup>

????????<Feature
Id="ProductFeature"
Title="SetupProject"
Level="1">

????????????<ComponentGroupRef
Id="ProductComponents" />

????????</Feature>

????在安装程序时会根据Feature中的先后顺序就行安装。

完整的示例文件:

<?xml
version="1.0"
encoding="UTF-8"?>

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

????<Product
Id="4039b7c2-b7be-48fe-b082-231215cb8412"
Name="SetupProject"
Language="1033"
Version="1.0.0.0"
Manufacturer="man"
UpgradeCode="4039b7c2-b7be-48fe-b082-231215cb8412">

????????<Package
InstallerVersion="200"
Compressed="yes"
InstallScope="perMachine" />

?

????????<MajorUpgrade
DowngradeErrorMessage="A newer version of [ProductName] is already installed." />

????????<MediaTemplate />

?

????????<Feature
Id="ProductFeature"
Title="SetupProject"
Level="1">

????????????<ComponentGroupRef
Id="ProductComponents" />

????????</Feature>

????</Product>

?

????<Fragment>

????????<Directory
Id="TARGETDIR"
Name="SourceDir">

????????????<Directory
Id="ProgramFilesFolder">

????????????????<Directory
Id="APPLICATIONROOTDIRECTORY"
Name="MyApplication " />

????????????</Directory>

????????</Directory>

?

<DirectoryRef
Id="APPLICATIONROOTDIRECTORY">

<Component
Id="WindowsFormsApplication.exe"
Guid="4039b7c2-b7be-48fe-b082-231215c34412">

<File
Id="WindowsFormsApplication.exe"
Source="MySourceFiles\WindowsFormsApplication.exe"
KeyPath="yes"
Checksum="yes"/>

</Component>

<Directory
Id="Files"
Name="Files">

<Component
Id="noimage1.jpg"
Guid="4030b7c2-b7be-48fe-b282-231215cb8812">

<File
Id="noimage1.jpg"
Source="MySourceFiles\files\noimage1.jpg"
KeyPath="yes"/>

</Component>

<Component
Id="noimage.jpg"
Guid="4030b7c2-b98e-48fe-b282-231215cb8412">

<File
Id="noimage.jpg"
Source="MySourceFiles\files\noimage.jpg"
KeyPath="yes"/>

</Component>

</Directory>

</DirectoryRef>

????</Fragment>

?

????<Fragment>

????????<ComponentGroup
Id="ProductComponents"
Directory="APPLICATIONROOTDIRECTORY">

<ComponentRef
Id="WindowsFormsApplication.exe"/>

<ComponentRef
Id="noimage1.jpg"/>

<ComponentRef
Id="noimage.jpg"/>

????????</ComponentGroup>

????</Fragment>

</Wix>

时间: 2024-10-16 20:39:07

WIX配置-打包文件的相关文章

规范开发目录 及 webpack多环境打包文件配置

规范开发目录 普通项目 开发目录: ├── project-name ├── README.md ├── .gitignore ├── assets ├── ├── js ├── ├── css ├── ├── images ├── ├── fonts├── index.html vue 项目开发目录:├── build├── config├── dist├── src├──├── api├──├── assets├──├──├── js├──├──├── style├──├──├──├── b

android studio开发工具的android library打包文件(.aar)本地引用

by 蔡建良 2014-5-13 关键点: 利用Gradle发布本地maven库支持android library 打包文件(*.aar) 的本地引用 开发环境: windows7 64位操作系统 android studio0.5.8 (1) 安装maven1.在安装maven之前,先确保已经安装JDK1.6及以上版本,并且配置好环境变量.2.下载maven3,最新版本是Maven3.2.1 ,下载地址:http://maven.apache.org/download.html 下载apach

android studio下 library打包文件(.aar)和本地引用

关键点: 利用Gradle发布本地maven库支持android library 打包文件(*.aar) 的本地引用 开发环境: windows7 64位操作系统 android studio0.5.8 (1) 安装maven1.在安装maven之前,先确保已经安装JDK1.6及以上版本,并且配置好环境变量.2.下载maven3,最新版本是Maven3.2.1 ,下载地址:http://maven.apache.org/download.html 下载apache-maven-3.2.1-bin

vue-cli 脚手架中 webpack 配置基础文件详解

一.前言 vue-cli是构建vue单页应用的脚手架,输入一串指定的命令行从而自动生成vue.js+wepack的项目模板.这其中webpack发挥了很大的作用,它使得我们的代码模块化,引入一些插件帮我们完善功能可以将文件打包压缩,图片转base64等.后期对项目的配置使得我们对于脚手架自动生成的代码的理解更为重要,接下来我将基于webpack3.6.0版本结合文档将文件各个击破,纯干料. 二.主体结构 1. package.json 项目作为一个大家庭,每个文件都各司其职.package.js

vue-cli脚手架中webpack配置基础文件详解

一.前言 vue-cli是构建vue单页应用的脚手架,输入一串指定的命令行从而自动生成vue.js+wepack的项目模板.这其中webpack发挥了很大的作用,它使得我们的代码模块化,引入一些插件帮我们完善功能可以将文件打包压缩,图片转base64等.后期对项目的配置使得我们对于脚手架自动生成的代码的理解更为重要,接下来我将基于webpack3.6.0版本结合文档将文件各个击破,纯干料.重点章节点击查看:package.json:config/index.js:webpack.base.con

webpack打包经验——处理打包文件体积过大的问题

前言 最近对一个比较老的公司项目做了一次优化,处理的主要是webpack打包文件体积过大的问题. 这里就写一下对于webpack打包优化的一些经验. 主要分为以下几个方面: 去掉开发环境下的配置 ExtractTextPlugin:提取样式到css文件 webpack-bundle-analyzer:webpack打包文件体积和依赖关系的可视化 CommonsChunkPlugin:提取通用模块文件 提取manifest:让提取的公共js的hash值不要改变 压缩js,css,图片 react-

记一次webpack4+react+antd项目优化打包文件体积的过程

背景 最近自己整了一个基于webpack4和react开发的博客demo项目,一路整下来磕磕碰碰但也实现了功能,就准备发到阿里云上面去看看,借用了同事的阿里云小水管服务器,配置完成之后首页加载花了十几秒,打开控制台network查看资源,打包的js体积有将近6M,及其影响访问体验,于是就开始了优化的路. 原因和解决方法 在webpack的配置文件中,对公共js做了抽取,分别会打包出react-verdor.js和antd-verdor.js,优化前的antd-verdor足足有4m大小,估计是把

atitit.手动配置列表文件的选择and 数据的层次结构 attilax总结最佳实践--yaml

atitit.手动配置列表文件的选择and 数据的层次结构 attilax总结最佳实践--yaml 1. yaml是个好的选择.. 1 2. 数据的层次结构--结构:hash,list,和block literal. 1 3. yaml跟json的实现区别 1 4. xml的优点及json的问题 2 4.1. ide友好 2 4.2. JSON也适合与任何数据,复杂struts难以阅读 2 4.3. json难以手工维护 3 5. 基于YAML的开源项目解析YAML文件最常用的Java库是JvY

配置日志文件

org.apache.log4j.Logger详解 1.概述 1.1. 背景 在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作:跟踪代码运行时轨迹,作为日后审计的依据:担当集成开发环境中的调试器的作用,向文件或控制台打印代码的调试信息. 最普通的做法就是在代码中嵌入许多的打印语句,这些打印语句可以输出到控制台或文件中,比较好的做法就是构造一个日志操作类来封装此类操作,而不是让一系列的打印语句充斥了代码的主体. http://l

nginx配置静态文件过期时间

1.配置指定文件不记录日志,同时设置静态文件过期时间location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)${ expires 15d; access_log off;}2.只配置静态文件过期时间#配置静态文件过期时间location ~ \.(js|css)${ expires 15d;}d 天 h 小时 m 分钟 用curl 查看本地127.0.0.1访问.如:curl -x127.0.0.1:80 www.dd.com/data/cache/style_1_fo