candle.exe Samplefirst.wxs
执行成功后会在当前目录下生成SampleFirst.wixobj文件,接着我们执行light命令:
light.exe Samplefirst.wixobj
light命令执行成功后我们就可以看到生成的安装文件SampleFirst.msi,这样一个简单的msi安装包就制作成功了。
1.4 SampleFirst代码
SampleFirst示例展示了最基本的wix应用,如果想要生成功能更丰富的安装包,还必须知道如何编写wix代码;wix源代码是标准的xml标记语言,我们打开SampleFirst.wxs文件,来看看代码的构成:
<Product>标签是我们发布的产品的基本信息,Language和 Codepage是设置我们生成安装包的语言环境,以后章节我们会详细讲到本地化语言的配置;Name和Manufacturer很好理解;需要注意的是Id和UpgradeCode属性,他们是具有唯一标识的GUID编号,还有Version属性是发布产品的版本号(不包括修订版本号)。
另外<Package>标签的ID也是具有唯一标识的GUID编号,所不同的是对于每次生成的安装包,我们都需要一个不同GUID,因此这里设置成*号,每次编译时时候编译器会自动为它生成一个GUID,关于这几个属性的作用我们将在制作升级程序和更新包的时候详细讲解。Description属性是安装包的全名或者叫描述;Comments可以理解成是注解,它是可选的;InstallerVersion则是指定运行该安装包所需要的Windows Installer的最低版本;Compressed指定是否压缩安装包中的文件,一般我们都设置成yes,可以节省不少空间。
另外这里Directory的默认的INSTALLDIR值是根据目录结构自动计算出来的,如果我们要将某些文件安装在固定位置,比如E盘根目录下,则我们需要在显式定义一个Property ,Property 的Value属性就是要存放目录的位置。大家可以尝试一下在Fragment下添加如下代码,会出现什么效果:
<Property Id ="INSTALLDIR" Value="E:/"/>
<?xml version=‘1.0‘ encoding=‘windows-1252‘?>
<Wix xmlns=‘http://schemas.microsoft.com/wix/2006/wi‘>
<Product Name=‘Foobar 1.0‘ Id=‘{2C9A3180-95F0-4cdd-B02C-A0ABCAAE3413}‘ UpgradeCode=‘{F4F8195E-E907-42dd-BB90-CC2403FA7384}‘
Language=‘1033‘ Codepage=‘1252‘ Version=‘$(var.Version)‘ Manufacturer=‘Acme Ltd.‘>
<Package Id=‘*‘ Keywords=‘Installer‘ Description="Acme‘s Foobar 1.0 Installer"
Comments=‘Foobar is a registered trademark of Acme Ltd.‘ Manufacturer=‘Acme Ltd.‘
InstallerVersion=‘100‘ Languages=‘1033‘ Compressed=‘yes‘ SummaryCodepage=‘1252‘ />
<Media Id=‘1‘ Cabinet=‘Sample.cab‘ EmbedCab=‘yes‘ DiskPrompt="CD-ROM #1" />
<Property Id=‘DiskPrompt‘ Value="Acme‘s Foobar 1.0 Installation [1]" />
<Icon Id="Foobar10.exe" SourceFile="$(var.Version)/FoobarAppl10.exe" />
<Icon Id="word.ico" SourceFile="$(var.Version)/word.ico" />
<Feature Id=‘Complete‘ Title=‘Foobar 1.0‘ Description=‘The complete package.‘
Display=‘expand‘ Level=‘1‘ ConfigurableDirectory=‘INSTALLDIR‘>
<Feature Id=‘MainProgram‘ Title=‘Program‘ Description=‘The main executable.‘ Level=‘1‘>
<ComponentGroupRef Id=‘MainCompGroup‘ />
<ComponentRef Id=‘compHelperLibrary‘ />
</Feature>
<Feature Id=‘Documentation‘ Title=‘Description‘ Description=‘The instruction manual.‘ Level=‘1000‘>
<ComponentRef Id=‘compManual‘ />
</Feature>
</Feature>
</Product>
<Fragment>
<ComponentGroup Id ="MainCompGroup">
<Component Id=‘compMainExecutable‘ Guid=‘{0008EE68-EA36-4d5d-8BC5-713029E1909A}‘ Directory=‘INSTALLDIR‘>
<File Id=‘filFoobarEXE‘ Name=‘FoobarAppl10.exe‘ DiskId=‘1‘ Source=‘$(var.Version)/FoobarAppl10.exe‘ KeyPath=‘yes‘>
<Shortcut Id="startmenuFoobar10" Directory="ProgramMenuDir" Name="Foobar 1.0" WorkingDirectory=‘INSTALLDIR‘ Icon="Foobar10.exe" IconIndex="0" Advertise="yes" />
<Shortcut Id="desktopFoobar10" Directory="DesktopFolder" Name="Foobar 1.0" WorkingDirectory=‘INSTALLDIR‘ Icon="Foobar10.exe" IconIndex="0" Advertise="yes" />
</File>
</Component>
<Component Id="compProgramMenuDir" Guid="{6886685C-E1B1-48d9-B6A7-548175BD8F17}" Directory="ProgramMenuDir">
<Shortcut Id="UninstallProduct" Name="Uninstall My Application" Directory="ProgramMenuDir" Target="[SystemFolder]msiexec.exe" Arguments="/x [ProductCode]" Description="Uninstall"/>
<RemoveFolder Id=‘rmvProgramMenuDir‘ On=‘uninstall‘ />
<RegistryValue Root=‘HKCU‘ Key=‘Software/[Manufacturer]/[ProductName]‘ Type=‘string‘ Value=‘‘ KeyPath=‘yes‘ />
</Component>
</ComponentGroup>
<ComponentGroup Id=‘ExtraGroup‘>
<Component Id=‘compHelperLibrary‘ Guid=‘{A30DAC3F-2902-479c-B530-B90A7BA8E514}‘ Directory=‘INSTALLDIR‘>
<File Id=‘filHelperDLL‘ Name=‘Helper.dll‘ DiskId=‘1‘ Source=‘$(var.Version)/Helper.dll‘ KeyPath=‘yes‘ />
</Component>
<Component Id=‘compManual‘ Guid=‘{25518565-2E48-415c-B4FD-A20E2EA869D5}‘ Directory=‘INSTALLDIR‘>
<File Id=‘filManual‘ Name=‘Manual.pdf‘ DiskId=‘1‘ Source=‘$(var.Version)/Manual.pdf‘ KeyPath=‘yes‘>
<Shortcut Id="startmenuManual" Directory="ProgramMenuDir" Name="Instruction Manual" Icon="word.ico" Advertise="yes" />
</File>
</Component>
</ComponentGroup>
</Fragment>
<Fragment>
<Directory Id=‘TARGETDIR‘ Name=‘SourceDir‘>
<Directory Id=‘ProgramFilesFolder‘ Name=‘PFiles‘>
<Directory Id=‘ManufacturerDir‘ Name=‘Acme‘>
<Directory Id=‘INSTALLDIR‘ Name=‘Foobar 1.0‘>
</Directory>
</Directory>
</Directory>
<Directory Id="ProgramMenuFolder" Name="Programs">
<Directory Id="ProgramMenuDir" Name="Foobar 1.0">
</Directory>
</Directory>
<Directory Id="DesktopFolder" Name="Desktop" />
</Directory>
</Fragment>
</Wix>