wix的“ KeyPath”属性是什么?


124

Wix的“ KeyPath ”属性是什么?特别是,它如何适用于以下方面:

<Component Id="ProgramMenuDir" Guid="*">
  <RemoveFolder Id="ProgramMenuDir" On="uninstall" />
  <RegistryValue Root="HKCU" Key="Software\CompName\AppName" 
                 Type="string" Value="" KeyPath="yes" />
</Component>

111
OMG Wix文档完全没有用。wix文档说,对于KeyPath属性,如果将其设置为“是”,则该文件将被视为组件的关键路径。太有帮助了!
Cheeso 2011年

5
@RobMensching-感谢您的精神和愿意为社区做贡献。告诉我如何不抱怨不如告诉我(和其他人)如何抱怨。如果两年前我知道在哪里养虫,那我一定会做的。同样,正如您在投票中所看到的,显然其他人也有类似的感觉。也许是时候出现这样的消息了:“帮助改进WiX!请通过单击HERE引发相应的错误”。
Cheeso

21
会的,@ Cheeso!请文件中的错误的位置:wixtoolset.org/bugs
罗布Mensching

8
@Cheeso要理解的关键概念是WiX安装程序项目会构建Windows Installer程序包。WiX文档不会(并且大多数情况下不应)复制Windows Installer文档。尽管您经常可以在不了解其支持的Windows Installer表的情况下使用WiX构造,但是如果有任何疑问,则应检查MSDN上的文档。对于组件,请从此处开始。
Tom Blodget

30
@TomBlodget:我认为WiX应该重复Windows Installer文档。对于大多数用户而言,WiX / Windows Installer拆分只会引起混乱,最终用户可以隐藏的内容越多,则整个工具的使用就越容易。
Scott Stafford

Answers:


122

Rob Mensching所述

组件的KeyPath是Windows Installer用于确定计算机上是否“存在”组件的单个资源。

这意味着Windows Installer决定是否安装组件时,将首先查看密钥路径资源是否已经存在。如果是,则不安装组件中的所有资源。

“修复” MSI时,密钥路径资源的存在还可以确定组件是否已损坏或丢失。

当密钥路径资源是版本文件时,Windows Installer仅在找到具有相同或更高版本的文件时才认为它存在。

在您的特定示例中,您有一个在卸载时会删除文件夹的组件。仅在给定的注册表项不存在时才安装此组件。当您需要组件的键路径来安装本身无法用作键路径的资源(例如,快捷方式)时,添加注册表项作为键路径是一种常见的技巧。


4
那么,显式地为组件中的唯一文件赋予keypath =“ no”属性又意味着什么呢?
Christopher B. Adkins'7

4
@Adkins:这将阻止wix的默认行为,即将该文件作为键路径。结果,没有密钥路径被写入该组件的安装程序数据库。在安装过程中,Windows安装程序将使用组件的目标文件夹作为键路径。获得此行为的另一种方法是在组件元素本身上设置“ keypath = yes”。无论如何,对我来说这似乎不是一个好主意。
Wim Coenen'7
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.