维克斯:对组件,目录,文件,注册表,等等等等使用的keyPath(Wix: Using KeyPat

2019-06-24 00:54发布

看完这个答案使用维克斯当办法“每个组件一个文件”,我很好奇,想找出使用时的最佳实践KeyPath上的其他元素,包括属性ComponentDirectoryRegistry等等,等等。

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

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

谢谢!

编辑#1 -再澄清: Directory

我知道没有的keyPath目录,但没有明确的/在我的问题详细说明。 主要是,我很好奇的keyPath的对组件的使用情况时,一个空目录,必须创建。 我看到那个的keyPath =“是”就是在这样的情况下,在母组件集。 但是,这是不够的安装程序,以检测/修复缺失的空文件夹? 还是应该将其与注册表项一起使用? 示例片段:

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

Answer 1:

在一般情况下,你应该立足在你的主要思想决定KeyPath选项。 从MSDN :

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

所以,如果你编写每个组件1个文件,你不会面对这种情况,当你不小心删除的文件和修复并没有把它带回来。 如果每个组件,您笔者N个文件,你反正要么选择其中一个是一个KeyPath (和维克斯文档鼓励你这样做明确的),或者你添加一个额外的注册表项,并让它成为KeyPath

回到你的问题:

如果我有一个安装程序需要创建一个空的目录应该我上的目录或设置的keyPath =“是”

目录元素不具备KeyPath属性。

如果一个文件在文件每个组件的方案具有的keyPath =“是”,是否有必要或最好设置它在其父组件?

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

我读的地方,而不是在一个文件中设置的keyPath的,应该使用每个文件注册表项和注册表元素上设置的keyPath =“是” ......这是真的/有必要吗?

这听起来像废话。 再次,对一般需要碱KeyPath -检测的组件。 为什么你需要一个额外的注册表项来检测文件是否存在文件系统上? 它可能是有意义的每个组件的情况下N个文件,在创作每件1个注册表项(即N个文件),并让Windows安装程序法官由注册表项,组件是否被认为是“不破”。

更新 :您不必引入注册表项,只是作为关键路径,以帮助安装跟踪一个空文件夹。 如果添加这是不够KeyPath='yes'父组件。

不要复杂的事情。 Windows安装程序是因为它是相当复杂的。 :) 希望这可以帮助。



文章来源: Wix: Using KeyPath on Components, Directories, Files, Registry, etc, etc