Wix使用整理(二)

来源:互联网 发布:网上淘宝客服招聘 编辑:程序博客网 时间:2024/05/18 12:36

 

1)         LanguageCodepage的设

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
Id="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>