zoukankan      html  css  js  c++  java
  • 使用WiX打包你的应用程序之一基本应用

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

    • 程序部署复杂,无法搞定,甚至于必须开发人员到现场去安装调试;
    • 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>

    保存为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实践,将在这个系列后面几篇文章中一一讨论.

  • 相关阅读:
    【资源共享】JNI 课题
    Firefly自动售货机解决方案
    【资源共享】Android开发技巧整理
    【资源共享】《Rockchip IO-Domain 开发指南 V1.0》
    【人脸识别+硬件】Firefly推出可商业化的人脸识别方案
    【技术案例】双目摄像头数据采集
    windows环境常用网络命令测试和分析(51cto实验01~02)
    利用三层交换机实现VLAN间路由配置
    c++11
    归并排序
  • 原文地址:https://www.cnblogs.com/sun/p/982305.html
Copyright © 2011-2022 走看看