注册表中安装的条目是否应该在Microsoft文件夹中?

时间:2018-04-11 10:36:46

标签: wix windows-installer

根据How To: Create a Shortcut on the Start Menu向使用Wix创建的安装程序添加快捷方式时,需要添加如下注册表值:

<RegistryValue Root="HKCU" Key="Software\Microsoft\MyApplicationName" Name="installed" Type="integer" Value="1" KeyPath="yes"/>

这个值真的应该在Software\Microsoft里面吗?在微软世界的许多情况下,我看到供应商用作范围,所以我想知道它是不是真的应该Software\MyVendorName\MyApplicationName

1 个答案:

答案 0 :(得分:1)

我肯定会按照别人的指示写到我自己的位置:

  • HKCU\Software\MyVendorName\MyApplicationName
  • HKLM\Software\MyVendorName\MyApplicationName

理想情况下,您的应用程序不应在注册表中的任何其他位置写入 - 除了这两个父位置之外。您“拥有”这两个注册表位置 - 而不是其他地方。你不应该在其他任何地方写 - 当然也不应该在Microsoft密钥下。我相信这是一个“通用样本”。

例外情况是您需要注册某些文件(或组件) - 例如 COM文件,其注册进入HKLM\SOFTWARE\Classes和{{1} }。这些机器和每个用户的位置合并为HKCU\SOFTWARE\ClassesHKCR)。 COM注册也可以被隔离,在这种情况下,您使用清单文件 - 然后根本不涉及注册表。 WiX具有特殊的COM相关元素,它们将通过标准MSI机制为您填充注册表 - 用于收集COM注册的HKEY_CLASSES_ROOT工具(以及其他内容)将为您自动生成这些元素,并且您编译的MSI将具有{ {3}}保留COM注册信息(heat.exeProgIdClass等...)。

更新:不要过多地补充内容,但可以根据several MSI tablesALLUSERS属性的值为每个用户或每台计算机安装MSI。如果已在MSI中填充了正确的COM表,则COM服务器将相应地按机器或每个用户进行注册。

如果您安装软件包,还有其他情况下安装过程会在注册表的其他位置进行更改。例如,当您安装驱动程序插件字体 COM + COM Interop 文件扩展名等等......在这些情况下,您的注册通常应该通过API来处理注册您的组件,在大多数情况下,您不应该自己在注册表中查找。很多此类注册由MSI处理,如果您正确执行 - 或者用于制作MSI文件的第三方工具中的内置构造。