首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >WiX技巧和技巧

WiX技巧和技巧
EN

Stack Overflow用户
提问于 2009-01-23 00:29:25
回答 26查看 220.1K关注 0票数 264

我们使用WiX已经有一段时间了,尽管人们经常抱怨它的易用性,但它运行得相当好。我正在寻找的是关于以下方面的有用建议:

为新的安装和升级构建/发布processes

  • Configuring installers
  • 设置WiX项目(布局、引用、文件将WiX添加到解决方案中,并发布适用于新安装和升级的
  • Any good WiX hacks WiX to share
EN

回答 26

Stack Overflow用户

发布于 2009-02-23 14:25:52

  1. 将变量保存在单独的wxi包含文件中。支持重复使用,查找变量的速度更快,并且(如果需要)允许外部工具更轻松地操作。
  2. 为x86和x64 builds定义平台变量
  3. 将安装位置存储在注册表中,从而使升级能够找到正确的位置。例如,如果用户设置了自定义安装目录。

注释:WiX专家Rob Mensching发布了一个excellent blog entry,该are更详细,并修复了从命令行设置属性时的边缘情况。

使用1.2和3的示例

  • 最简单的方法始终是do major upgrades,因为它允许在单个MSI中进行新安装和升级。UpgradeCode被固定为唯一的Guid,并且永远不会改变,除非我们不想升级现有的产品。

备注:在WiX 3.5中,有一个新的MajorUpgrade元素,该元素使life成为添加/删除程序中的一个图标

  • 在发布版本时会对安装程序进行版本控制,将msi文件复制到部署目录中。例如,使用从AfterBuild目标调用的wixproj目标:

  • 使用heat获取带有通配符(*) Guid的文件。如果您想在多个项目中重用WXS文件(请参阅我对同一产品的多个版本的回答),这将非常有用。例如,此批处理文件自动获取RoboHelp输出。

@echo off robocopy ..\WebHelp "%TEMP%\WebHelpTemp\ WebHelp“/E /NP /PURGE /XD .svn”%wix%bin\..\WebHelp“dir "%TEMP%\WebHelp”-nologo -sfrag -suid -ag -srd -dir WebHelp -out WebHelp.wxs -cg WebHelpComponent -dr INSTALLLOCATION -var

有一些事情正在发生,robocopy在收获之前剥离Subversion工作副本元数据;-dr根目录引用被设置到我们的安装位置而不是默认的TARGETDIR. -var被用来创建一个变量来指定源目录(web deployment output).

  • Easy方式通过使用Strings.wxl在欢迎对话框标题中包含产品版本以进行本地化。(来源:saschabeaumont。添加为这个伟大的技巧是隐藏在评论中)

{\WixUI_Font_Bigger}欢迎使用ProductName安装向导

  • Wim Coehen's advice。这还允许您省略(或通配符*) MSI Mensching有一个neat way,可以通过搜索value 3来快速跟踪MSI日志文件中的问题。注意关于internationalization.

  • When添加条件功能的注释,将默认功能级别设置为0(禁用),然后将条件级别设置为所需的值会更直观。如果您设置默认功能级别>= 1,则条件级别必须为0才能禁用它,这意味着条件逻辑必须与您预期的相反,这可能会令人困惑:)

不升级

票数 157
EN

Stack Overflow用户

发布于 2009-03-05 16:13:17

正在检查是否安装了IIS:

代码语言:javascript
复制
<Property Id="IIS_MAJOR_VERSION">
    <RegistrySearch Id="CheckIISVersion" Root="HKLM" Key="SOFTWARE\Microsoft\InetStp" Name="MajorVersion" Type="raw" />
</Property>

<Condition Message="IIS must be installed">
    Installed OR IIS_MAJOR_VERSION
</Condition>

正在检查Vista+上是否安装了IIS6元数据库兼容性:

代码语言:javascript
复制
<Property Id="IIS_METABASE_COMPAT">
    <RegistrySearch Id="CheckIISMetabase" Root="HKLM" Key="SOFTWARE\Microsoft\InetStp\Components" Name="ADSICompatibility" Type="raw" />
</Property>

<Condition Message="IIS 6 Metabase Compatibility feature must be installed">
    Installed OR ((VersionNT &lt; 600) OR IIS_METABASE_COMPAT)
</Condition>
票数 38
EN

Stack Overflow用户

发布于 2009-11-26 12:01:10

将所有in保存在单独的名称空间中

  • 功能从F.示例开始: F.Documentation、F.Binaries、F.SampleCode。目录组件以Di.
  • and Ex开头: C.ChmFile,C.ReleaseNotes,C.LicenseFile,C.IniFile,C.Registry
  • CustomActions are C. Ex: CA.LaunchHelp,CA.UpdateReadyDlg,C.IniFile are CA. CA.LaunchHelp CA.UpdateReadyDlg Fi.
  • CA.UpdateReadyDlg are Fi.
  • ise.

我发现这对跟踪所有不同类别中的所有不同id有很大帮助。

票数 34
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/471424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档