WiX技巧和技巧
我们已经使用了一段时间的WiX,尽管通常对易用性抱怨很大,但它的运行情况还算不错。 我在寻找的是有用的建议:
将变量保存在独立的wxi
包含文件中。 允许重用,变量的查找速度更快,并且(如果需要)可以通过外部工具更轻松地进行操作。
为x86和x64版本定义平台变量
<!-- Product name as you want it to appear in Add/Remove Programs-->
<?if $(var.Platform) = x64 ?>
<?define ProductName = "Product Name (64 bit)" ?>
<?define Win64 = "yes" ?>
<?define PlatformProgramFilesFolder = "ProgramFiles64Folder" ?>
<?else ?>
<?define ProductName = "Product Name" ?>
<?define Win64 = "no" ?>
<?define PlatformProgramFilesFolder = "ProgramFilesFolder" ?>
<?endif ?>
将安装位置存储在注册表中,使升级能够找到正确的位置。 例如,如果用户设置了自定义安装目录。
<Property Id="INSTALLLOCATION">
<RegistrySearch Id="RegistrySearch" Type="raw" Root="HKLM" Win64="$(var.Win64)"
Key="SoftwareCompanyProduct" Name="InstallLocation" />
</Property>
注意 :WiX大师Rob Mensching发布了一篇优秀的博客文章,详细介绍了当从命令行设置属性时的边缘情况。
使用1. 2.和3的示例。
<?include $(sys.CURRENTDIR)Config.wxi?>
<Product ... >
<Package InstallerVersion="200" InstallPrivileges="elevated"
InstallScope="perMachine" Platform="$(var.Platform)"
Compressed="yes" Description="$(var.ProductName)" />
和
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="$(var.PlatformProgramFilesFolder)">
<Directory Id="INSTALLLOCATION" Name="$(var.InstallName)">
最简单的方法总是进行重大升级,因为它允许在单个MSI中进行新的安装和升级。 UpgradeCode固定为一个独特的Guid,并且永远不会改变,除非我们不想升级现有产品。
注意 :在WiX 3.5中有一个新的重要升级元素,使生活更加轻松!
在添加/删除程序中创建一个图标
<Icon Id="Company.ico" SourceFile="..ToolsCompanyImagesCompany.ico" />
<Property Id="ARPPRODUCTICON" Value="Company.ico" />
<Property Id="ARPHELPLINK" Value="http://www.example.com/" />
在发布版本上,我们版本安装程序,将msi文件复制到部署目录。 这是一个使用从AfterBuild目标调用的wixproj目标的例子:
<Target Name="CopyToDeploy" Condition="'$(Configuration)' == 'Release'">
<!-- Note we append AssemblyFileVersion, changing MSI file name only works with Major Upgrades -->
<Copy SourceFiles="$(OutputPath)$(OutputName).msi"
DestinationFiles="..DeploySetup$(OutputName) $(AssemblyFileVersion)_$(Platform).msi" />
</Target>
使用热量通过通配符(*)Guid收集文件。 如果您想在多个项目中重复使用WXS文件,请参阅此文档(有关同一产品的多个版本的答案)。 例如,这个批处理文件会自动收集RoboHelp输出。
@echo off
robocopy ..WebHelp "%TEMP%WebHelpTempWebHelp" /E /NP /PURGE /XD .svn
"%WIX%binheat" dir "%TEMP%WebHelp" -nologo -sfrag -suid -ag -srd -dir WebHelp -out WebHelp.wxs -cg WebHelpComponent -dr INSTALLLOCATION -var var.WebDeploySourceDir
有一些事情发生, robocopy
在收获之前剥离了Subversion的工作副本元数据; -dr
根目录引用被设置为我们的安装位置而不是默认的TARGETDIR; -var
用于创建一个变量来指定源目录(Web部署输出)。
通过使用Strings.wxl进行本地化,可以轻松地将产品版本包含在欢迎对话框标题中。 (信用:saschabeaumont。添加为这个伟大的技巧隐藏在评论中)
<WixLocalization Culture="en-US" xmlns="http://schemas.microsoft.com/wix/2006/localization">
<String Id="WelcomeDlgTitle">{WixUI_Font_Bigger}Welcome to the [ProductName] [ProductVersion] Setup Wizard</String>
</WixLocalization>
节省一些痛苦,并遵循Wim Coehen关于每个文件一个组件的建议。 这也允许你省去(或通配符*
)组件GUID。
Rob Mensching可以通过搜索value 3
来快速追踪MSI日志文件中的问题。 请注意有关国际化的意见。
添加条件功能时,将默认功能级别设置为0(禁用)更直观,然后将条件级别设置为所需的值。 如果您将默认功能级别设置为> = 1,则条件级别必须为0才能将其禁用,这意味着条件逻辑必须与您所期望的相反,这可能令人困惑:)
<Feature Id="NewInstallFeature" Level="0" Description="New installation feature" Absent="allow">
<Condition Level="1">NOT UPGRADEFOUND</Condition>
</Feature>
<Feature Id="UpgradeFeature" Level="0" Description="Upgrade feature" Absent="allow">
<Condition Level="1">UPGRADEFOUND</Condition>
</Feature>
检查IIS是否已安装:
<Property Id="IIS_MAJOR_VERSION">
<RegistrySearch Id="CheckIISVersion" Root="HKLM" Key="SOFTWAREMicrosoftInetStp" Name="MajorVersion" Type="raw" />
</Property>
<Condition Message="IIS must be installed">
Installed OR IIS_MAJOR_VERSION
</Condition>
检查Vista +上是否安装了IIS 6元数据库兼容性:
<Property Id="IIS_METABASE_COMPAT">
<RegistrySearch Id="CheckIISMetabase" Root="HKLM" Key="SOFTWAREMicrosoftInetStpComponents" Name="ADSICompatibility" Type="raw" />
</Property>
<Condition Message="IIS 6 Metabase Compatibility feature must be installed">
Installed OR ((VersionNT < 600) OR IIS_METABASE_COMPAT)
</Condition>
将所有ID保存在不同的名称空间中
F.
开头F.
例如:F.Documentation,F.Binaries,F.SampleCode。 C.
开头C.
例如:C.ChmFile,C.ReleaseNotes,C.LicenseFile,C.IniFile,C.Registry CA.
例如:CA.LaunchHelp,CA.UpdateReadyDlg,CA.SetPropertyX Fi.
Di.
我发现这有助于在各种类别中跟踪所有各种ID的巨大帮助。
链接地址: http://www.djcxy.com/p/61621.html上一篇: WiX tricks and tips