最近在学习Wix toolset (版本3.10),阅读了官网的文档教程,记录下所学和遇到的一些问题。

Wix可以通过配置xml格式的文件.wxs生成.msi安装包,下载之后将安装目录下的bin文件夹添加到系统的环境变量下,这样我们就可以在cmd里面使用Wix的命令行了,打包主要用到的命令行是candle.exelight.exe

candle.exe将目标*.wxs转换成light.exe可识别的*.wixobj文件。
light.exe则是生成最终*.msi的工具。

开始使用Wix

可以从教程中下载到一个最简单的例子,这个例子没有引导界面,直接将程序安装好,程序中需要替换GUID为自定义的ID,打包成.msi只需要执行

1
2
candle.exe SampleFirst.wxs
light.exe SampleFirst.wixobj

使用Wix自带的引导界面

要使用Wix自带的引导界面需要在light.exe命令后时添加选项-ext WixUIExtension

1
2
candle.exe SampleWixUI.wxs
light.exe -ext WixUIExtension SampleWixUI.wixobj

同时在.wxs中添加

1
<UIRef Id="WixUI_Mondo" />

Id为Wix Extension提供的5中引导界面之一

  • WixUI_Mondo
  • WixUI_FeatureTree
  • WixUI_InstallDir
  • WixUI_Minimal
  • WixUI_Advanced

详情可参考教程

引导界面使用中文

ProductPackage标签中有Language,Codepage,LanguagesSummaryCodepage属性,可以根据微软的语言列表查到需要用到的语言所对应的Id,LANGID对应LanguageLanguagesASCII code page对应CodepageSummaryCodepage

在修改完ID之后,打包时需要添加命令-cultures:zh-CN,不同语言对应的code参考这里,否则语言修改将不会生效。

自定义引导界面

Wix只提供了5中固定格式的引导界面,所以有时候我们需要自己订制界面,可以参考教程中提供的这个例子,这是一个增加引导界面流程的例子。

Wix扩展的这些所有界面的配置文件我们可以在安装目录下的\SDK\wixui中找到对应.wxs文件。

通过观察这些文件我们可以发现Wix扩展的这些引导界面是通过如下方法来控制界面跳转的

1
2
<Publish Dialog="LicenseAgreementDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg">1</Publish>
<Publish Dialog="LicenseAgreementDlg" Control="Next" Event="NewDialog" Value="InstallDirDlg">LicenseAccepted = "1"</Publish>

通过ControlNextBack属性表示用户操作的时间,来控制对应的事件。

如果我们需要删除协议许可窗口可以将对应组件的引导界面的.wxs(\SDK\wixui目录中)复制到自己的当前项目中,并修改<UI Id="你自己的ID">UI标签的ID为自定义标签,命名为YOU_WXS.wxs(此处自己命名),然后将LicenseAgreementDlg对应的部分删除比替换有关LicenseAgreementDlg窗口的跳转。打包的命令为

1
2
candle.exe SampleFirst.wxs YOU_WXS.wxs
light.exe -ext WixUIExtension SampleFirst.wixobj YOU_WXS.wixobj

详情可以参考教程