gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 11:00:46 25 4
gpt4 key购买 nike

阅读后this answer关于使用 WiX 时的“每个组件一个文件”的方法,我很想知道使用 KeyPath 时的最佳实践是什么。其他元素的属性,包括 Component , Directory , Registry等等等等。
我对任何一般性建议感兴趣,但这里有几个具体问题:

  • 如果我有一个安装程序需要创建的空目录,我应该
    套装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>

    最佳答案

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

    This value points to a file or folder belonging to the component that the installer uses to detect the component.



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

    回到你的问题:

    If I have an empty directory that installer needs to create should I set KeyPath="yes" on Directory or



    Directory元素没有 KeyPath属性。

    If a File has KeyPath="yes" in a file-per-component scenario, is it necessary or good practice to set it on its parent Component?



    不,基本上,这没有意义。如果 ComponentKeyPath="yes" ,则此组件安装到的目录成为关键路径。当您在 File 上设置它时明确地,那么显然该文件是一个关键路径。

    I read somewhere that instead of setting KeyPath on a File, one should use a Registry key for each File and set KeyPath="yes" on Registry element...Is that really true/necessary?



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

    更新 :您不必引入注册表项来充当帮助安装程序跟踪空文件夹的关键路径。加上 KeyPath='yes'就够了到父组件。

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

    关于Wix:在组件、目录、文件、注册表等上使用 KeyPath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10358989/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com