我们使用WiX创建了一个安装程序。 在注册表中,我们将其保存在HKCU下(参见示例)。 为当前用户安装了桌面图标和所有内容。
<DirectoryRef Id="INSTALLDIR">
<Component Id="CMP_SaveInstallDir" Guid="52e5e617-2c9a-4514-a6b0-055e4adc6a0b">
<RegistryValue Id="MyInstallDirId" KeyPath="yes" Action="write" Root="HKCU" Key="Software\ABC\MyProduct" Name="MyProduct" Value="[INSTALLDIR]" Type="string" />
</Component>
</DirectoryRef>
对于升级,我们也使用WiX。我们尝试找到注册表项,如果可用,我们安装升级。 如果安装完整安装程序的人安装了升级安装程序,那么效果很好。
现在,安装程序也应该用于在某些计算机上预安装该软件。这意味着,管理员用户(“Joe Admin”)安装该软件。 稍后普通用户(“Pete User”,有权安装软件)应该能够安装升级。
但由于完全安装是由“Joe Admin”完成的,“Pete User”无法使用升级安装程序进行升级,因为在他的注册表(“Pete User”的HKCU)中找不到注册表项。 / p>
我认为这种情况并不罕见,所以我希望有人可以帮我找到解决方案。
提前致谢!
答案 0 :(得分:2)
以下是一篇可以帮助您的文章:http://setupanddeployment.com/installation-environment/peruser-permachine/
基本上,您正在错误地处理安装位置。如果您的安装是每台机器(适用于所有用户),则应仅使用每台机器位置。 HKEY_CURRENT_USER是每个用户的位置,在每台计算机的安装程序中使用它是一种不好的做法。因此你的问题。
答案 1 :(得分:1)
我认为Cosmin is right,在这种情况下你必须使用 per-machine 安装。
毕竟,如果Joe Admin安装了应用程序,那么只有该用户才能访问它:桌面图标,程序文件及其设置存储在管理员配置文件中。因此,Pete User无权访问该应用程序的任何组件。
因此,您要么按机器安装,要么允许用户安装它(不仅仅是升级)。