gpt4 book ai didi

WiX 技巧和技巧

转载 作者:行者123 更新时间:2023-12-02 17:31:39 25 4
gpt4 key购买 nike

我们已经使用 WiX 一段时间了,尽管人们常常提示易用性,但它的运行情况相当不错。我正在寻找有关以下方面的有用建议:

  • 设置 WiX 项目(布局、引用、文件模式)
  • 将 WiX 集成到解决方案以及构建/发布流程中
  • 为新安装和升级配置安装程序
  • 您想分享的任何好的 WiX 技巧

最佳答案

  1. 将变量保存在单独的 wxi 包含文件中。允许重用,可以更快地查找变量,并且(如果需要)可以更轻松地通过外部工具进行操作。

  2. 为 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 ?>
  3. 将安装位置存储在注册表中,以便升级时能够找到正确的位置。例如,如果用户设置自定义安装目录。

     <Property Id="INSTALLLOCATION">
    <RegistrySearch Id="RegistrySearch" Type="raw" Root="HKLM" Win64="$(var.Win64)"
    Key="Software\Company\Product" Name="InstallLocation" />
    </Property>

    注意:WiX 大师 Rob Mensching已发布excellent blog entry它提供了更多细节,并修复了从命令行设置属性时的边缘情况。

    使用 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)">
  4. 最简单的方法总是 major upgrades ,因为它允许在单个 MSI 中进行新安装和升级。 UpgradeCode固定为唯一的 Guid 并且永远不会改变,除非我们不想升级现有产品。

    注意:在 WiX 3.5 中,有一个新的 MajorUpgrade构成生命的元素even easier !

  5. 在“添加/删除程序”中创建图标

    <Icon Id="Company.ico" SourceFile="..\Tools\Company\Images\Company.ico" />
    <Property Id="ARPPRODUCTICON" Value="Company.ico" />
    <Property Id="ARPHELPLINK" Value="http://www.example.com/" />
  6. 在发布版本中,我们对安装程序进行版本控制,将 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="..\Deploy\Setup\$(OutputName) $(AssemblyFileVersion)_$(Platform).msi" />
    </Target>
  7. 使用热度来收获带有通配符 (*) Guid 的文件。如果您想在多个项目中重用 WXS 文件,这很有用(请参阅我对同一产品的多个版本的回答)。例如,此批处理文件自动收集 RoboHelp 输出。

    @echo off  
    robocopy ..\WebHelp "%TEMP%\WebHelpTemp\WebHelp" /E /NP /PURGE /XD .svn
    "%WIX%bin\heat" 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 部署输出)。

  8. 通过使用 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>
  9. 为了避免一些痛苦,请遵循 Wim Coehen's advice每个文件一个组件。这还允许您省略(或通配符 *)component GUID .

  10. Rob Mensching 有一个 neat way通过搜索值 3 快速跟踪 MSI 日志文件中的问题。请注意有关国际化的评论。

  11. 添加条件功能时,将默认功能级别设置为 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>

关于WiX 技巧和技巧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/471424/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com