当需要管理员登录的用户运行时,Wix 不写入 HKCU?

问题描述 投票:0回答:1

我正在为 am Office COM Addin Dll 编写一个 wix4 捆绑安装程序,它需要在 HKCR 中编写一堆注册表项(对于机器来说也是如此)来注册 Dll,然后在 HKCU 中编写一些注册表项来告诉 Office 该 Dll存在。

目前,我的 AppComponents.wxs 包含:

<Wix ...>
  <Fragment ...>
    <ComponentGroup ...>
      <Component ...>
        <File Id="..." Source="...">

        <!-- Register classes in HKCR for COM -->
        <RegistryValue Root="HKCR" Key=...>
        <RegistryValue Root="HKCR" Key=...>

        <!-- Tell Office about it for this user in HKCU -->
        <RegistryValue Root="HKCU" Key="Software\Microsoft\VBA\VBE\6.0\Addins ...>

这在大多数情况下都适用,除非非管理员用户尝试运行安装。在这种情况下,管理员登录提示会弹出,如果我输入管理员密码,所有 HKCR 条目都会被写入,但 HKCU 条目会写入授权安装的管理员帐户的用户配置单元,而不是用户帐户正在运行它。

如何配置安装程序以写入登录用户的 HKCU 配置单元,而不是管理员的配置单元?

我似乎只能通过设置捆绑包中 MSI 的“范围”参数来控制 wix4 捆绑包是否进行用户/计算机安装。

通过尝试不同的组合,我发现:

  • 通过按用户安装,一切都会如您所愿地转到 HKCU,但 Excel 随后无法加载插件 - 就好像它要求某些 COM 注册条目位于 HKLM 中一样。
  • 通过 perMachine 安装,一切都会如您所愿地转到 HKLM,但 Excel 之后无法看到“COM 插件注册”条目 - 它只会在 HKCU 中查找它们。

换句话说,Excel 似乎只有在某些 COM Addin 注册表项位于 HKLM 且某些位于 HKCU 中时才能正常工作。

我已经能够通过包含一个小exe来获得一些东西,该exe为登录用户添加/删除“COM插件注册”(无论是否以管理员身份运行),然后在结束时将其作为CustomAction运行安装/卸载开始。

wix wix4
1个回答
0
投票

您的代码片段未显示极其重要的属性,例如 ALLUSERS 和 MSIINSTALLPERUSER。您收到 UAC 提示的事实告诉我,这些不是针对每个用户设置的,而是针对每台机器设置的。

© www.soinside.com 2019 - 2024. All rights reserved.