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

时间:2012-04-27 23:03:03

标签: wix installer windows-installer

在使用WiX时,在“每个组件一个文件”方法上阅读this answer之后,我很想知道在其他元素(包括KeyPath)上使用Component属性时的最佳做法是什么,DirectoryRegistry等等。

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

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

谢谢!

编辑#1 - 澄清重新:Directory

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

<Directory Id="LOGS" Name="Logs">
  <Component Id="LogsDir" Guid="*" KeyPath="yes">
    <CreateFolder Directory="LOGS" />
  </Component>
</Directory>

1 个答案:

答案 0 :(得分:25)

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

  

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

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

回到你的问题:

  

如果我有一个安装程序需要创建的空目录,我应该   在目录或

上设置KeyPath =“yes”

Directory元素没有KeyPath属性。

  

如果文件在每个组件的文件方案中具有KeyPath =“yes”,那么它是   在其父组件上设置它的必要或良好做法?

不,基本上,这没有意义。如果Component具有KeyPath,则安装此组件的目录将成为关键路径。当你明确地在File上设置它时,显然文件是一个关键路径。

  

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

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

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

不要让事情复杂化。 Windows Installer非常复杂。 :) 希望这会有所帮助。