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 理解perUser和perMachine的密钥路径问题_Wix_Windows Installer_Wix3.10 - Fatal编程技术网

Wix 理解perUser和perMachine的密钥路径问题

Wix 理解perUser和perMachine的密钥路径问题,wix,windows-installer,wix3.10,Wix,Windows Installer,Wix3.10,WIX 3.10 我在网站上阅读了这里的答案,但似乎没有一个能满足我的好奇心,即当涉及到KeyPath 这是阅读部分 <Package Compressed="yes" InstallerVersion="200" Manufacturer="company name" Description="tool name" Comments="comments" P

WIX 3.10

我在网站上阅读了这里的答案,但似乎没有一个能满足我的好奇心,即当涉及到
KeyPath

这是阅读部分

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

所以我的目录层次结构是(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将您设置为默认密钥路径

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

[这里有一个很好的答案,所以如果heavyd的答案有帮助,那就给他点奖励吧。 ]

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

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

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

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


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

一旦你提到香港大学,事情就有道理了。令我惊讶的是,我以前从未见过这个根值。我现在很好,被接受为答案。
<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>