Wix:在组件,目录,文件,注册表等上使用KeyPath等

zam*_*6ak 24 installer windows-installer wix

看完这个答案的"组件一档"的方式使用WiX的时候,我很好奇,想找出使用时,什么是最好的做法KeyPath上的其他元素的属性,包括Component,Directory,Registry等,等.

我对任何一般性建议感兴趣,但这里有几个具体问题:

  • 如果我有一个安装程序需要创建我应该设置一个空目录KeyPath="yes"Directory或其父Component?如果它不是空的怎么办?
  • 如果文件具有KeyPath="yes"每个组件的文件方案,是否有必要或良好做法在其父组件上设置它?
  • 我在某处读到,不KeyPath应该在文件上设置,而是应该为每个文件使用注册表项并KeyPath="yes"在Registry元素上设置...这是真的/必要吗?

谢谢!

编辑#1 - 澄清重新: Directory

我知道Directory没有KeyPath,但在我的问题中没有明确/详细.主要是,当我必须创建一个空目录时,我很好奇在组件上使用KeyPath.我看到KeyPath ="yes"就是在父Component上设置的.但这足以让安装程序检测/修复丢失的空文件夹吗?或者是否应该与注册表项一起使用?示例代码段:

<Directory Id="LOGS" Name="Logs">
  <Component Id="LogsDir" Guid="*" KeyPath="yes">
    <CreateFolder Directory="LOGS" />
  </Component>
</Directory>
Run Code Online (Sandbox Code Playgroud)

Yan*_*nko 26

一般而言,您应该根据KeyPath选项的主要思想做出决定.来自MSDN:

此值指向属于安装程序用于检测组件的组件的文件或文件夹 .

因此,如果您为每个组件创作1个文件,那么当您意外删除文件并且修复没有将其恢复时,您将不会遇到这种情况.如果你为每个组件创作N个文件,你无论如何都要选择其中一个作为一个KeyPath(并且WiX文档鼓励你明确地这样做),或者你添加一个额外的注册表项并让它成为KeyPath.

回到你的问题:

如果我有一个安装程序需要创建的空目录,我应该在Directory上设置KeyPath ="yes"

目录元素没有KeyPath属性.

如果文件在每个组件的文件场景中具有KeyPath ="yes",那么在其父组件上设置它是否必要或良好实践?

不,基本上,这没有意义.如果组件具有KeyPath="yes",则安装此组件的目录将成为密钥路径.当你把它放在一个文件明确,那么很明显,该文件是一个关键路径.

我在某处读到,不是在文件上设置KeyPath,而是应该为每个文件使用一个注册表项,并在Registry元素上设置KeyPath ="yes"......这是真的/必要吗?

这听起来像胡说八道.同样,基于一般需要KeyPath- 检测组件.为什么需要额外的注册表项来检测文件系统中是否存在文件?当您为每个组件创建1个注册表项(即N个文件)时,对于每个组件N个文件可能有意义,并让Windows Installer根据该注册表项判断该组件是否被视为"未损坏".

更新:您不必引入注册表项只是作为帮助安装程序跟踪空文件夹的关键路径.如果添加KeyPath='yes'到父组件就足够了.

不要让事情复杂化.Windows Installer非常复杂.:) 希望这可以帮助.

  • 有一种情况是建议使用额外的注册表项作为密钥路径:当您的组件不包含任何可用作密钥路径的其他资源时.典型示例是安装快捷方式的组件. (10认同)