Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wix:在组件、目录、文件、注册表等上使用KeyPath_Wix_Installation_Windows Installer - Fatal编程技术网

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

Wix:在组件、目录、文件、注册表等上使用KeyPath,wix,installation,windows-installer,Wix,Installation,Windows Installer,在阅读了使用WiX时的“每个组件一个文件”方法之后,我很想知道在其他元素上使用KeyPath属性时的最佳实践是什么,包括component,Directory,Registry等 我对任何一般性建议都感兴趣,但这里有几个具体问题: 如果我有一个安装程序需要创建的空目录,我应该 在目录或其父组件上设置KeyPath=“yes”?如果是呢 不是空的吗 如果文件在每个组件场景的文件中都有KeyPath=“yes”,是吗 在其父组件上设置它是必要的还是良好的做法 我在某个地方读到,不是在文件上设置Ke

在阅读了使用WiX时的“每个组件一个文件”方法之后,我很想知道在其他元素上使用
KeyPath
属性时的最佳实践是什么,包括
component
Directory
Registry

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

  • 如果我有一个安装程序需要创建的空目录,我应该 在
    目录
    或其父组件上设置
    KeyPath=“yes”
    ?如果是呢 不是空的吗
  • 如果文件在每个组件场景的文件中都有
    KeyPath=“yes”
    ,是吗 在其父组件上设置它是必要的还是良好的做法
  • 我在某个地方读到,不是在文件上设置
    KeyPath
    ,而是一个 应为每个文件使用注册表项,并将
    KeyPath=“yes”
    设置为打开 注册表元素…这是真的/必要的吗
谢谢

编辑#1-澄清:目录 我知道目录没有KeyPath,但在我的问题中没有明确/详细说明。 主要是,当必须创建空目录时,我对组件上的KeyPath用法感到好奇。我看到在这种情况下,在父组件上设置了KeyPath=“yes”。但这是否足以让安装程序检测/修复丢失的空文件夹?还是应该与注册表项一起使用?示例代码段:


一般来说,您应该根据
关键路径
选项的主要思想做出决定。发件人:

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

因此,如果您为每个组件编写一个文件,您就不会遇到意外删除一个文件而修复未将其恢复的情况。如果您为每个组件编写了N个文件,您可以选择其中一个作为
键路径
(WiX文档鼓励您明确地这样做),或者添加一个额外的注册表项,让它成为
键路径

回到你的问题:

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

元素没有
KeyPath
属性

如果文件在每个组件场景的文件中都有KeyPath=“yes”,是吗 在其父组件上设置它是必要的还是良好的做法

不,基本上,这没有意义。如果具有
KeyPath=“yes”
,则此组件安装到的目录将成为密钥路径。当您显式地将其设置为上时,显然该文件是一个密钥路径

我在某个地方读到,与其在文件上设置KeyPath,不如 为每个文件使用注册表项,并在注册表上设置KeyPath=“yes” 元素…这是真的/必要的吗

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

更新:您不必引入注册表项,只需将其用作帮助安装程序跟踪空文件夹的键路径即可。如果将
KeyPath='yes'
添加到父组件,就足够了

不要把事情复杂化。Windows安装程序非常复杂,因为它是。:)
希望这能有所帮助。

有一种情况建议使用额外的注册表项作为键路径:当您的组件不包含任何其他可用作键路径的资源时。典型的例子是一个安装快捷方式的组件。@Yan Sklyarenko感谢您的详细回答。我知道目录没有键路径,但我更新了我的问题以澄清与键路径相关的上下文。顺便说一句,你说Win安装程序很复杂是对的,我的目标是确保我的安装不会复杂化。这就是我问这个问题的原因。:)关于WiX的教程非常好,但我找不到包含有用提示的“最佳实践”来源(例如Wim Coenen在评论中发布的一条建议)@zam6ak,我已经更新了密钥路径和空文件夹的答案。另一个额外注册表项的用途是,如果文件被删除,您不想在修复时重新创建该文件。对于“用户”拥有的目录中的文件很有用,这样他们就可以删除他们不想要的文件。