Wix:在组件、目录、文件、注册表等上使用KeyPath
在阅读了使用WiX时的“每个组件一个文件”方法之后,我很想知道在其他元素上使用Wix:在组件、目录、文件、注册表等上使用KeyPath,wix,installation,windows-installer,Wix,Installation,Windows Installer,在阅读了使用WiX时的“每个组件一个文件”方法之后,我很想知道在其他元素上使用KeyPath属性时的最佳实践是什么,包括component,Directory,Registry等 我对任何一般性建议都感兴趣,但这里有几个具体问题: 如果我有一个安装程序需要创建的空目录,我应该 在目录或其父组件上设置KeyPath=“yes”?如果是呢 不是空的吗 如果文件在每个组件场景的文件中都有KeyPath=“yes”,是吗 在其父组件上设置它是必要的还是良好的做法 我在某个地方读到,不是在文件上设置Ke
KeyPath
属性时的最佳实践是什么,包括component
,Directory
,Registry
等
我对任何一般性建议都感兴趣,但这里有几个具体问题:
- 如果我有一个安装程序需要创建的空目录,我应该
在
或其父组件上设置目录
?如果是呢 不是空的吗KeyPath=“yes”
- 如果文件在每个组件场景的文件中都有
,是吗 在其父组件上设置它是必要的还是良好的做法KeyPath=“yes”
- 我在某个地方读到,不是在文件上设置
,而是一个 应为每个文件使用注册表项,并将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,我已经更新了密钥路径和空文件夹的答案。另一个额外注册表项的用途是,如果文件被删除,您不想在修复时重新创建该文件。对于“用户”拥有的目录中的文件很有用,这样他们就可以删除他们不想要的文件。