使用WiX打包你的应用程序之一---基本应用

来源:互联网 发布:淘宝发货地址不是买家 编辑:程序博客网 时间:2024/06/13 22:28

很多从事开发的同行,在程序部署方面经常遇到这样一些问题:

  • 程序部署复杂,无法搞定,甚至于必须开发人员到现场去安装调试;
  • Visual Studio Deployment 项目难以使用及定制
  • 使用Install Shield等比较费钱的工具(如果你爱使用盗版并且不介意在将来某个时候承受版权纠纷,那么这条不算).
  • 甚至于没有安装包,显得很不正规(呵呵,我以前也这么干^_^)

如果你遇到这些问题,并且确定你是使用Microsoft家的Visual Studio系列IDE进行开发,那么我觉得有个很好的打包工具可以推荐给你: Windows Installer XML, 简称WiX.

WiX是Microsoft Corp.的Windows Team 的一个叫Rob Mensching的软件设计工程师(现在已经是高级软件设计工程师啦)在2000年设计的一个简单打包工具集合.到现在为止,稳定版本为2.0.5325.0,最新可用版本为3.0.2925.0. V3和V2的主要区别是针对任务结构和对VS的集成做了新的修改. 由于作者在实际的应用环境中,出于稳定性和减少因工具使用带来的bug这两个方面的考虑, 应用了V2 Stable作为打包工具集. 在这个系列文章中,也会使用该版本讲解. 实际V2和V3的差别,如果读者对V3很感兴趣,请自行研究,不再在本系列中详细对比.

请从这里下载WiX 2.0.5325.0

请从这里下载WiX 3.0.2925.0  ProjectAggregator2 3.0.2925.0

一个Windows安装文件(.msi files)在应用意义上来说可以说成是一个小型数据库,Windows Installer运行安装文件的安装过程,就是根据这个小型数据库的对应表的描述,讲对应文件拷贝到目标文件夹,修改指定文件内容, 修改对应注册表内容,修改系统服务等. 这个数据库是由几个主要表组成:

表名 主要用途 Direcotry表 规定目标的文件夹结构,Directory节点的嵌套结构就是Default路径. File表 规定想要被安装到目的地的文件, 在打包时从何处获取; Binary表 规定在安装过程中要使用的文件, 在打包时从何处获取; (区别于File) Component表 规定安装包内的基本组件结构,共同完成同一功能的文件及Action, 应归纳在一个Component节点下 Registry表 规定对注册表项的修改 Feature表 Component的不同组合就是Feature; 允许用户定制安装不同组件. Dialog表 安装过程显示的窗体 CustomAction表 自定义的Action保存在这里 User表 定义操作系统的User(Windows) UserGroup表 定义操作系统的Group(Windows) Property表 定义在安装包内部使用的属性; 属性是用来传递信息的节点. IIS*表 进行IIS有关操作. XMLFile表 对XML或者类似文件中的某些节点进行修改的Action表.

你可以使用Orca来打开任何一个msi文件查看以上内容^_^

一个简单的WiX文件(wixdemo.wxs)内容如下, 这个版本没有UI,有UI的版本请从我的SkyDrive下载:

   1:  <?xml version="1.0" encoding="utf-8"?>
   2:  <?define SOURCEDIR="C:/wixdemo"?>
   3:  <Wix xmlns="http://schmeas.microsoft.com/wix/2003/01/wi">
   4:      <Product Name="WixDemo" Id="904F998D-B3BE-4536-9ABE-F8B72B98BCEA" Language="1033" Version="1.0.0.0" Manufacturer="Wix Demo Corp.">
   5:          <Package Id="4DB93456-952B-4463-BFD0-86306D5C29D4" Keywords="Installer" Description="Our road to first wix installer" Comments="We will rock you" Manufacturer="Our Corp." InstallerVersion="100" Languages="1033" Compressed="yes" SummaryCodepage="1252" />
   6:          <Media Id="1" Cabinet="OMSimulator.cab" EmbedCab="yes" />
   7:            <Directory Id="TARGETDIR" Name="SourceDir">
   8:                <Directory Id="ProgramFilesFolder" Name="PFiles">
   9:                        <!--Write a new key to registry on installation and remove it when unstallation-->
  10:                    <Component Id="RegComponent" Guid="6EEBA57B-A0B0-4328-A414-931A14904913" DiskId="1">
  11:                        <Registry Id="SignatureKey" Root="HKLM" Key="SOFTWARE/WixDemo/MySignature" Action="createKeyAndRemoveKeyOnUninstall" />
  12:                    </Component>
  13:                        <!--Target Directory: ProgramFile/Wix Demo Application-->
  14:                    <Directory Id="WIXDEMO" Name="WixDemo" LongName="Wix Demo Application">
  15:                            <!--File to be copied-->
  16:                        <Component Id="WixApp" Guid="C03083B7-E539-47b3-84C6-88ED783A5C31">
  17:                                <File Id="File_1" Name="Readme"  LongName="Readme.txt" KeyPath="no" Compressed="yes" src="$(var.SOURCEDIR)/" DiskId="1"/>
  18:                        </Component>
  19:                            <!--File to be copied and configed-->
  20:                        <Component Id="Config" Guid="DCACE815-3FEF-4f1d-8494-1F1877954578">
  21:                                <File Id="File_2" Name="WebCon"  LongName="Web.config" KeyPath="yes" Compressed="yes" src="$(var.SOURCEDIR)/" DiskId='1'/>
  22:                                <XmlFile Id='ConnStrSet' File='[WIXDEMO]web.config'  Action='setValue' 
  23:                                    ElementPath="/configuration/connectionStrings/add[/[]@name='ConnectionString'[/]]/@connectionString" 
  24:                                    Value="Data Source=[INSTANCE];Initial Catalog=[DEMODB];Connection Timeout=300;Integrated Security=SSPI;"
  25:                                    Sequence='1' />
  26:                                <XmlFile Id='LogPathSet' File='[WIXDEMO]web.config'  Action='setValue' 
  27:                                    ElementPath="/configuration/appSettings/add[/[]@key='LogFilePath'[/]]/@value"
  28:                                    Value="[LOGPATH]"
  29:                                    Sequence='2' />
  30:                        </Component>
  31:                    </Directory >
  32:                </Directory>
  33:          </Directory>
  34:   
  35:          <Feature Id="DemoFeature" Title="This feature installs the components for WiX demo" Level="1">
  36:            <ComponentRef Id="RegComponent"/>
  37:            <ComponentRef Id="WixApp" />
  38:            <ComponentRef Id="Config" />
  39:          </Feature>
  40:        
  41:        <Property Id="INSTANCE" Value="." />
  42:        <Property Id="DEMODB" Value="WixDemoDB" />
  43:        <Property Id="LOGPATH" Value="c:/WixDemo/log" />
  44:      </Product>
  45:  </Wix>
.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }

保存为wixdemo.wxs到c:/wixdemo, 并我的skydrive里面的web.config, readme.txt, 使用命令

candle wixdemo.wxs

light wixdemo.wixobj sca.wixlib wixca.wixlib /out wixdemo.msi

之后就可以得到安装文件wixdemo.msi

这个demo的主要目的是演示文件拷贝, 文件内容根据特定指示修改, 在接下来的版本中会根据在安装时用户在ui中输入的信息更新配置文件.

Xpath的写法,IIS相关问题, UI相关问题,属性相关问题,自定义Action问题以及我的WiX实践,将在这个系列后面几篇文章中一一讨论.

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 衣服有图片在淘宝找不到同款怎么办 淘宝卖家小儿说质量不合格怎么办 订单显示显示已签收没收到货怎么办 网上买过的东西查不到订单号怎么办 亚航的组合机票飞机延误怎么办 在微信上面对面红包被骗了钱怎么办 人欠我钱不给我怎么办 微信号被骗走然后骗了朋友钱怎么办 微信手机充值不到帐怎么办 中银香港密码器坏了怎么办 香港恒生银行的编码器丢了怎么办 淘宝拍下订单发货物流不显示怎么办 wish查到仿品审核变慢怎么办 淘宝卖家订单号错误无法修改怎么办 顺丰快递运单号微信扫描取消怎么办 买的王者荣耀号有守护平台怎么办 融e联登录密码错三次怎么办 金融e家u盾密码忘了怎么办 用工行网银转账后想取消交易怎么办 工行融e借没有密码器怎么办 工行融e借密码器丢了怎么办 工行融e联手机登录密码忘记怎么办 领导给员工抱怨工作太烦怎么办 员工抱怨忙的忙死闲的闲死怎么办 爱上骗我进传销的人该怎么办 尚赫辟谷期间吃了东西怎么办 肾结石掉在输尿管里面好痛怎么办 寄的快递快递单号找不到了怎么办 手机停机但是快递是这个号码怎么办 百世通快递卡在一个地方没动怎么办 电信无限流量20g用完了怎么办 至尊宝qq密保手机被更换怎么办 至尊宝账户密保手机被改怎么办 照片放到私密相册找不到了怎么办 出口报关报错境内货源地怎么办? 微信提现未到账交易记录删了怎么办 支付宝忘记密码就可以登陆怎么办 电脑上登陆QQ忘记密码了怎么办? 电脑被管理员限制登录微信了怎么办 快手绑定的手机号丢了登不上怎么办 快手绑定的手机号丢了登不了怎么办