我正在为 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 捆绑包是否进行用户/计算机安装。
通过尝试不同的组合,我发现:
换句话说,Excel 似乎只有在某些 COM Addin 注册表项位于 HKLM 且某些位于 HKCU 中时才能正常工作。
我已经能够通过包含一个小exe来获得一些东西,该exe为登录用户添加/删除“COM插件注册”(无论是否以管理员身份运行),然后在结束时将其作为CustomAction运行安装/卸载开始。
您的代码片段未显示极其重要的属性,例如 ALLUSERS 和 MSIINSTALLPERUSER。您收到 UAC 提示的事实告诉我,这些不是针对每个用户设置的,而是针对每台机器设置的。