了解perUser和perMachine的keyPath问题

时间:2017-01-10 16:19:05

标签: wix windows-installer wix3.10

WIX 3.10

我在网站上阅读了答案,但在KeyPath

时,似乎没有一个能让我理解perUser与PerMachine之间的区别

这是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。我怎么知道密钥路径是针对机器还是用户?是不是DirRef的孩子是特定的perUser?

示例:

<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冲突。任何想法或解释

1 个答案:

答案 0 :(得分:2)

关键路径不是&#34;对于&#34;每台机器或每个用户,关键路径只是一个关键路径。此外,当您删除密钥路径时,您会收到错误,因为(我相信)WiX会使您成为默认密钥路径。

这些用户/机器ICE测试的一般问题是它们是静态的,并且不知道安装最终是针对每个用户还是每台机器,因此即使它不胜,也会收到警告应用。通常有办法避免警告。

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

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

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

&#34;在同一组件中混合每用户和每台机器数据可能导致在多用户环境中仅为部分用户部分安装组件&#34;

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

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