Wix使用整理(一)

    由于工作需要,学习了一段时间Wix,总算小有起色。鉴于国内Wix 的普及和使用有限,这里将个人遇到得问题和解决方案记录下来,以便交流和相互促进。

    

   Wix :全称 Windows Installer XML , 属于微软的一个开源项目,目标是使用 XML 语言灵活的定制具有各种功能的安装包,需要微软的 Windows Installer 服务支 持。

   Wix
生 成的产品为 msi 文 件,这种可执行文件与 exe 文件最大的不同为,它更底层,安装文件的同时可以对系统或者其他软件进行设置。

  下面的所有内容是基于 Wix3.0 版本。

 

    Wix 基本入门资料:

    Wix Document

    Wix tutorial ( 仅支持到 Wix2.0)

    这两份资料都可以通过 Wix 的发布网站获取。

 

1)         Language Codepage 的设置

Language 指所在地区使用的语言,为数字编号。
Codepage
指所在地区的代码页,用来进行 区域区分。
下来列举几个常见的区域代号:
语言                                语言 - 国家      Language      Codepage
English                            en-us             1033               1252
Simplified Chinese             zh-cn              2052               936
Traditional Chinese            zh-tw              1028                950

2)         GUID 的生成

VS2005 中,通过 工具 ”——“ 创建 GUID” 生成。
GUID
也可以自行定义,但是前提是要保证唯一。

3)         安装文件描述 XML 自动生成

当安装文件特别多的时候,我们 就需要用专用的工具进行文件描述 XML 的自动生成了,采用的是 Wix 自带的 heat 工具,位于安装目录的 bin 下。
    Heat
的使用方法为:
    heat.exe [-?] harvestType <harvester arguments> -out sourceFile.wxs
   
详细见 Wix 说明文档。
   
例子:
    heat.exe  dir ABC -gg -ke -sfrag -template:fragment -dr INSTALLLOCATION -cg BasicComponentGroup -srd -out  ABC.wxs
   
作用为:将目录 ABC (相对目录)下的所有文件(包括空目 录)作为一个 ComponentGroup 添加到 ABC.wxs 文件中,其中根目录为 INSTALLLOCATION ,段标签为 fragment
运行这行命令会自动生成一个 wxs 文件,里面包含 ABC 目录下所有文件的描述。

4)         Feature 的选择安装

Wix 安装包中所有的组件都是以 Feature 的方式安装到系统中的, Level 是安装级别,是最重要的属性之一,不可缺少。
    Level
的值为整型,最小为 0 ,最大 1000 。为 0 的时候此 Feature 不安装。 一般来 说 Level 与选 择安装关联,与之相对应的一个属性为 INSTALLLEVEL ,默认为 1. 小于 1Feature 将不会被安装。 Level 值为 3FeatureTypical 类型, Level 值大于 3Complete 类型。 Level 也可以在安装时动态修改,使用 <Condition> 条件判断。例如:
<Feature Id="DesktopFt" Title="Desktop" Level="1">
        <Condition Level="0"><![CDATA[HASDESKTOP <> "1"]]></Condition>
        <ComponentRef Id="DesktopShortcutComponent"/>
  </Feature>
   
如果 HASDESKTOP 属性值不为 1 ,那么此 FeatureLevel 将为 0 ,不会被安装。使用此种方式选择安装需注意 HASDESKTOP 属性的初始化位置,一定要保证在 Feature 初始化前进行。否则设置无效。
   
也可以采用另一种方法选择性安 装:
    HASDESKTOP
属性修改的地方添加 <Publish>
      <Publish Event="AddLocal" Value="ALL">1</Publish>
      <Publish Event="Remove" Value="DesktopFt"><![CDATA[HASDESKTOP <> "1"]]></Publish>
   
这样效果一样,但是不需要 HASDESKTOP 的值的初始化在 Feature 之前。
   
详细参考 http://www.joyofsetup.com/2007/05/30/feature-conditions-and-ui/
(
附注:    注意此种方式下内置属性 REMOVE 的值就不再为空,那么在安装时也不能以 REMOVE 来判断当前操作 )

5)         Property 的使用

Wix 中使用自定义变量的方法为声明 Property (属性)。
Property
分为两种:全局的和局部的。全 局属性必须全部大写,否则视为局部属性。
例如:
<Property Id="HASDESKTOP" Value="1"/>
如果改为小写,那么其他文件(也许是 fragment )的代码调用属性无效。
搜索、判断得到的属性一律为全局 属性,大写。例如:
<Property Id="VC71PATH">
      <RegistrySearch Id="VC71" Type="raw" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\7.1" Name="InstallDir"/>
</Property>
上述例子为在注册表中查找 VC71InstallDir 的值,如存在将值付给 VC71PATH ,不存在则 VC71PATH 为空。

6)         安装包的中文化

Wix 默认的语言为 en-us ,中文化需要另外添加 zh-cnzh-tw 的描述文件。
拥有了中文拓展的文件以后,在代码中使用 loc 调用属性即可,使用方式与 en-us 无异。
当然也可以自定义一些中文化的标签,格式为:
<WixLocalization Culture="zh-cn" xmlns="http://schemas.microsoft.com/wix/2006/localization">
<String Id="LicenseThirdPartText" Overridable="yes">
请仔细阅读以下声明 </String>
</WixLocalization>
调用方式为: text =”!(loc.LicenseThirdPartText)”

中文语言包下载地址为:http://download.csdn.net/salever

7)         内置 CustomAction 的使用

1. Quiet Execution Custom Action 安静模式下执行操作。允许用户在后台执行一些命令,但是不 出现执行窗口。
   
1 ,安静模式下执行 CMD 操作 
<Property Id="QtExecCmdLine" Value="command line to run"/>
<CustomAction Id="QtExecExample" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="immediate" Return="check"/>
<InstallExecuteSequence>   
   <Custom Action="QtExecExample" After="TheActionYouWantItAfter"/>
</InstallExecuteSequence>
采用安静模式执行 CMD 操作,但是不出现 CMD 命令窗口。注意 Value 中的命令以及应用程序必须加引 号,即使没有空格也要加上。

2 ,安静模式下执行其他应用程序操作
<CustomAction
I d="QtExecDeferredExampleWithProperty_Cmd" Property="QtExecDeferredExampleWithProperty"
              Value=""[#MyExecutable.exe]"" Execute="immediate"/>
<CustomAction Id="QtExecDeferredExampleWithProperty" BinaryKey="WixCA" DllEntry="CAQuietExec"
              Execute="deferred" Return="check" Impersonate="no"/>

<InstallExecuteSequence>
    <Custom Action="QtExecDeferredExampleWithProperty_Cmd" After="CostFinalize"/>
    <Custom Action="QtExecDeferredExampleWithProperty" After="TheActionYouWantItAfter"/>
</InstallExecuteSequence>

2.ShellExecute CustomAction
执行打开文档或 URL 等操作。典型应用为安装完成后打开帮助 文件或则运行安装程序。

例:
<Property Id="WixShellExecTarget" Value="myapplication.exe" />
    <CustomAction Id="LaunchApplication"
        BinaryKey="WixCA"
        DllEntry="WixShellExec"
        Impersonate="yes" />
    </Product>

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值