什么是wix'KeyPath'属性?

Set*_*eth 120 installer windows-installer wix

什么是Wix'KeyPath '属性?特别是,它如何适用于以下内容:

<Component Id="ProgramMenuDir" Guid="*">
  <RemoveFolder Id="ProgramMenuDir" On="uninstall" />
  <RegistryValue Root="HKCU" Key="Software\CompName\AppName" 
                 Type="string" Value="" KeyPath="yes" />
</Component>
Run Code Online (Sandbox Code Playgroud)

Wim*_*nen 116

正如Rob Mensching解释的那样:

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

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

当您"修复"MSI时,密钥路径资源的存在还确定组件是否已损坏或丢失.

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

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

  • 那么,明确给出组件中唯一一个keypath ="no"属性的文件有什么意义呢? (4认同)
  • @Adkins:这会抑制wix的默认行为,将该文件作为keypath.因此,没有密钥路径写入该组件的安装程序数据库.在安装过程中,Windows安装程序将使用组件的*destination文件夹*作为键路径.获得此行为的另一种方法是在组件元素本身上设置"keypath = yes".无论如何,对我来说这似乎不是一个好主意. (4认同)