【问题标题】:understanding keyPath issue for both perUser and perMachine了解 perUser 和 perMachine 的 keyPath 问题
【发布时间】:2017-05-25 05:06:54
【问题描述】:

WIX 3.10

我在网站上阅读了答案,但似乎没有一个能满足我的好奇心,以了解 perUser 与 PerMachine 在 KeyPath 方面的区别

这是 perUser 部分

<Package Compressed="yes"
              InstallerVersion="200"
             Manufacturer="company name"
             Description="tool name"
             Comments="comments"
             Platform="x64"
             InstallScope="perUser"/>

所以我的目录层次结构是 (perUser)

 <Directory Id="TARGETDIR" Name="SourceDir" >
         <Directory Id="AppDataFolder" Name="AppDataFolder">
            <Directory Id="INSTALLFOLDER" Name="Concept Attribute Editor" />
         </Directory>
         <Directory Id="ProgramMenuFolder">
            <Directory Id="ConceptAttributeEditorShortcut"
                       Name="Concept Attribute Editor">
            </Directory>
         </Directory>
         <Directory Id="DesktopFolder">
         </Directory>
      </Directory>

在构建时我收到错误消息,说组件具有每个用户和每个机器的数据以及每个机器的 keyPath。我怎么知道 keypath 是用于机器还是用户?成为特定于 perUser 的 DirRef 的孩子还不够吗?

示例:

<DirectoryRef Id="TARGETDIR">
         <Component Id="cmp9E3CD94933B0EB4D8E119985E636EFAA" Guid="F8703A26-2332-4658-BF4C-5FD9B03D2CAB" KeyPath="yes" Win64="yes">
            <RegistryKey ForceCreateOnInstall="yes" Key="CLSID\{5A9D8C50-28CA-44E7-BC56-D77949F016E8}\Implemented Categories\{62C8FE65-4EBB-45E7-B440-6E39B2CDBF29}" Root="HKCU" />
         </Component>
      </DirectoryRef>

现在,当我删除 keyPath 时,它仍然抱怨 keyPath 冲突。任何想法或解释

【问题讨论】:

    标签: wix windows-installer wix3.10


    【解决方案1】:

    密钥路径不是“针对”每台机器或每个用户的,密钥路径只是一个密钥路径。此外,当您删除密钥路径时会出现错误,因为(我相信)WiX 使您成为默认密钥路径。

    这些用户/机器 ICE 测试的一般问题是它们是静态的,并且不知道最终是按用户还是按机器进行安装,因此即使不适用,您也会收到警告。通常有一些方法可以避免这些警告。

    [这里有一个很好的答案,所以如果heightd的答案有帮助,请给他功劳。 How do I fix WiX warning: Component 'X' has both per-user and per-machine data with an HKCU Registry KeyPath ]

    一般问题在于为特定用户安装的资源。它也与修复(和更新)有关,因为密钥路径定义了将用于修复的资源,通过版本检查检查更新,但这在这里不太相关。

    如果您在每台计算机安装中将注册表项或文件安装到用户配置文件位置,则不会为任何其他用户安装该资源。也许使用快捷方式会提示修复,但不能保证这一点(除非您明确设计为按需安装),这意味着安装的产品可能会被其他用户破坏 - 您在每台机器安装中拥有每个用户的数据,并且有些用户没有一切,因为缺少文件或注册表项。由于 ICE 测试不知道每个用户安装实际上会发生,因此您会收到 HKCU 的错误。如果您打补丁或升级,情况可能会变得更糟,因为结果可能是未打补丁的文件。这就是为什么 ICE57 文档说:

    “在同一个组件中混合每个用户和每个机器的数据可能会导致在多用户环境中的某些用户只安装部分组件”

    如果您进行每台机器安装,您将获得多用户环境。 (可能有一些终端服务类型的设置受到影响,但我没有检查过。)

    在您的情况下,将根更改为 HKMU 可能会修复警告,因为 HKMU 表示每个用户的 HKCU 和每台机器的 HKCR。 ICE 测试不应该抱怨这一点。

    【讨论】:

    • 一旦你提到 HKMU,事情就变得有意义了。令我惊讶的是,我以前从未见过这个根值。我现在很好,被接受为答案。
    猜你喜欢
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    • 2014-06-08
    • 2011-06-07
    相关资源
    最近更新 更多