WiX可以创建的Windows Installer数据库类型包括:Windows Installer 安装包 (MSI 文件)和 Merge Modules (MSM 文件)。
编写第一个 .wxs File
选择一个你最喜欢的XML编辑器,来编写全部范例。我使用notepad,创建一个新文件“product.wxs”。虽然取什么文件名都无所谓,但.wxs扩展名可以让我们知道这是一个Windows Installer Xml源文件。现在,让我们添加只有3行代码的.wxs文件:
<?xml version='1.0'?>
<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>
</Wix>
这构成源文件的轮廓。你可以把这个空文件作为candle.exe的输入,来输出一个空的object文件。按照下面的步骤,你可以看到非常简单的输出:
C:/test> candle product.wxs
Microsoft (R) Windows Installer Xml Compiler version 1.0.1220.15022
Copyright (C) Microsoft Corporation 2003. All rights reserved
C:/test> type product.wixobj
<?xml version="1.0" encoding="utf-8"?><wixObject
xmlns="http://schemas.microsoft.com/wix/2003/04/objects"
src="C:/test/product.wxs" />
C:/test>
在继续往下之前,先注意两件事情。
(1)当没有任何错误时,除了文件头,candle不输出其他文本。事实上,你可以在命令行中指定-nologo来抑制文件头的输出。这种情况下,candle不输出任何信息,除非有错误产生。
(2)源文件的路径被储存在.wixobj文件中。这有助于追踪错误的来源。事实上,当错误产生时,链接程序使用"src"属性输出更多信息的错误消息。
现在我们已经看到了一个空的源文件产生了一个空的object文件。让我们创建一个可安装的Windows Installer安装包。添加下面的代码到你的product.wxs文件:
<?xml version='1.0'?>
<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>
<Product Id='12345678-1234-1234-1234-123456789012' Name='Test Package' Language='1033'
Version='1.0.0.0' Manufacturer='Microsoft Corporation' UpgradeCode='12345678-1234-1234-1234-123456789013' >
<Package Id='12345678-1234-1234-1234-123456789012'
Description='My first Windows Installer package'
Comments='This is my first attempt at creating a Windows Installer database'
Manufacturer='Microsoft Corporation' InstallerVersion='200' Compressed='yes' />
<Directory Id='TARGETDIR' Name='SourceDir'>
<Component Id='MyComponent' Guid='12345678-1234-1234-1234-123456789012' />
</Directory>
<Feature Id='MyFeature' Title='My 1st Feature' Level='1'>
<ComponentRef Id='MyComponent' />
</Feature>
</Product>
</Wix>
这可以让我们创建一个MSI文件,该文件的ProductCode是{12345678-1234-1234-1234-123456789012},ProductLanguage是"1033",ProductVersion是"1.0.0.0"。所有这些信息都取自<Product/>元素。<Package/>元素定义了所有加入到MSI的摘要信息。最后的<Directory/>和<Feature/>树与<Component/>一起创建。这可以让我们的MSI在机器上注册成功。
按照下面的步骤,让我们编译,链接,安装,并看一下已经注册的文件包。
注意:MSI需要管理员权限,如果不是以管理员权限安装,将退出而无错误提示。
C:/test> candle product.wxs
Microsoft (R) Windows Installer Xml Compiler version 1.0.1220.15022
Copyright (C) Microsoft Corporation 2003. All rights reserved
product.wxs
C:/test> light product.wixobj
Microsoft (R) Windows Installer Xml Linker version 1.0.1220.15022
Copyright (C) Microsoft Corporation 2003. All rights reserved
C:/test> msiexec /i product.msi
C:/test> //delivery/tools/msiconfig.exe
.
.
.
{12345678-1234-1234-1234-123456789012} Test Package
.
.
.
在列出的所有你的机器上已经安装的Windows Installer包中,你应该看到"Test Package"。你也可以到Control Panel中的Add/Remove Programs,"Test Package"已经出现在那里。再把它卸载掉。
现在我们已经有了一个可以正确安装和卸载的包。让我们真正安装一些东西。创建一个名为"readme.txt"的文本文件,随便输入一些文本。"Hello, World!"是最讨人喜欢的。接下来,要修改product.wxs:
<?xml version='1.0'?>
<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>
<Product Id='12345678-1234-1234-1234-123456789012' Name='Test Package' Language='1033'
Version='1.0.0.0' Manufacturer='Microsoft Corporation' UpgradeCode='12345678-1234-1234-1234-123456789013'>
<Package Id='12345678-1234-1234-1234-123456789012'
Description='My first Windows Installer package'
Comments='This is my first attempt at creating a Windows Installer database'
Manufacturer='Microsoft Corporation' InstallerVersion='200' Compressed='yes' />
<Media Id='1' Cabinet='product.cab' EmbedCab='yes' />
<Directory Id='TARGETDIR' Name='SourceDir'>
<Directory Id='ProgramFilesFolder' Name='PFiles'>
<Directory Id='MyDir' Name='Test Program'>
<Component Id='MyComponent' Guid='12345678-1234-1234-1234-123456789012'>
<File Id='readme' Name='readme.txt' DiskId='1' Source='readme.txt' />
</Component>
</Directory>
</Directory>
</Directory>
<Feature Id='MyFeature' Title='My 1st Feature' Level='1'>
<ComponentRef Id='MyComponent' />
</Feature>
</Product>
</Wix>
编译,链接,然后安装那个 MSI后,你应该可以看到在你系统的"Program Files"下有个目录名叫"Test Program"。在那个"Test Program"下应该有你创建的"readme.txt"文件以及你输入的文字。最后别忘了卸载这个MSI,以便将来重新安装。
相信与否,这就是创建Windows Installer安装包的全部过程。