首页 > 解决方案 > Wix 工具集 HKMU 与 HKCR,HKMU 写入 HKCR,HKCR 不可见但有效

问题描述

我在 Wix 工具集中进行文件关联,非常简单,例如:

<RegistryValue Root="HKMU"
Key="SOFTWARE\Classes\.myfile" Value="myfile" Type="string"/>
<RegistryValue Root="HKMU"
Key="SOFTWARE\Classes\myfile" Value="MyFileTypeInWindowsExplorer" Type="string"/> 

我很困惑 - 使用 HKMU 和 HKCR 它可以工作,但阅读有限的文档,例如http://akashche.github.io/wixgen/wixgen-jaxb/apidocs/com/redhat/akashche/wixgen/jaxb/RegistryRootType。 html我的逻辑告诉我使用 HKCR 而不是 HKMU 但是我看到其他人使用 HKMU,是的,它写入 CLASSES_ROOT 我找到我的关联。我只是不明白为什么 HKMU 在应该写入 CURRENT_USER 时写入 CLASSES_ROOT - 除非我的安装仅适用于当前用户。因此,使用 HKCR - 用于 CLASSES_ROOT - 它应该写入,但我看不到它,但是它有效,这意味着它在那里,但对我不可见?

所以,我以某种方式得到了这个,但我还在摸不着头脑。文档是有限的。

谁能解释一下 Wix 工具集中 RegistryRootType 的选项?

谢谢桑尼奇

标签: wix

解决方案


读取注册表时,HKCR 是正在查看注册表的进程所有者配置文件的 HKLM\SOFTWARE\Classes 和 HKCU\SOFTWARE\Classes 的合并视图。在 Windows Installer 中,如果您使用 COM 表(ClassId、ProgId、AppId、TypeLib)或注册表 HCKR,它将考虑安装范围(每台机器与每用户)并写入适当的位置。

对于 HKCU\SOFTWARE 与 HKLM\SOFTWARE 没有合并,HKMU 用于指定您要写入的内容。

注意:大多数 MSI 是为 Per-Machine 编写的。每用户和单包每用户/每机器安装是一个非常高级的主题,用例有限,所以你可能想多了。您也可能需要此功能。


推荐阅读