Windows Installer 3.1 - 需要为每个用户

时间:2018-05-03 06:03:35

标签: windows-installer

我安装了Windows安装程序项目的安装程序。 问题是:当我通过Windows用户完成安装时,目标应用程序在此用户下运行良好。但是当我由其他用户登录时,它会再次提示安装该应用程序。

我的期望是:我不希望它再次安装,可以直接使用。

我尝试编辑安装程序项目的注册表部分,从" HKEY_CURRENT_USER"移动密钥。到" HKEY_USERS",它不起作用,在目标计算机的注册表中,密钥仍然在" HKEY_Current_user",我怀疑根本原因,无论注册表。而且我不知道为什么修改注册表不起作用。

3 个答案:

答案 0 :(得分:0)

自我修复,社会的祸害 :自我修复有很多,我已多次写过,但实质上是关于组件密钥路径丢失(或损坏),Windows Installer尝试通过安装缺少的组件来纠正这种情况。如果您的组件具有HKCU密钥路径,则将在应用程序启动时为每个用户安装(通过advertised shortcut) - 因为每个用户的HKCU都不同,所以每个用户必须存在资源。当Windows Installer运行以将此特定于用户的资源放置到位时,我们将其称为自我修复。自修复也是检查应用程序是否正确安装的通用机制(它不仅适用于特定于用户的资源)。 Here is a very short, but more elaborate explanation of self-repair

找到罪魁祸首 :听起来你知道哪个组件触发了自我修复。如果你不能找到它using this procedure

解决问题 :很难为所有情况提供通用修补程序。通常,您可以删除整个资源,例如,如果它是HKCU注册表项,您只需将其从设置中删除,您的应用程序可以在首次启动时将其添加为默认值。这并不总是可行的 - 如果缺少默认注册表项(显示设计糟糕的应用程序 - 任何应用程序应该在启动时写入所有用户配置默认值),某些应用程序会导致各种戏剧性,并且在这些情况下我使用自修复(有效,所以它只运行一次),或Active Setup - 这是一个微软的功能,允许"可运行的东西"跑一次。有关更多技术细节,请参阅链接。

用户特定数据和设置 :以下是关于用户配置文件和注册表设置分发的文章 - 以及它一直存在问题。以及如何处理它的一些建议。不是很好,但值得一读:Create folder and file on Current user profile, from Admin Profile

也许提供一些更多技术细节,说明资源到底是什么,注册表中的路径是什么,应用程序的类型等等......

关于自我修复的起源 :供您参考,以下是一些链接,其中包含有关自我修复的更多信息,而不是任何理智的人可以消化:-):

  1. Self-repair - explained
  2. Self-repair - finding real-world solutions
  3. Self-repair - how to avoid it in your own package
  4. 进一步的链接:

答案 1 :(得分:0)

虽然问题可能是“修复”,但在某些情况下并不意味着安装已损坏,这是因为此行为用于向尚未使用该应用程序的用户提供文件和注册表项。

一个明显的原因是将文件安装到用户配置文件位置,例如MSI的标准文件夹属性名称,如AppDataFolder(当前用户的Roaming文件夹的完整路径),或PersonalFolder或其他一些。在这些情况下,AppDataFolder中有一个文件用于安装用户,但不适用于稍后登录的其他用户。据推测,应用程序需要该应用程序的所有用户的文件,因此Windows Installer通过安装文件“修复”应用程序,需要原始MSI。同样的想法也适用于HKCU注册表项,这些注册表项将针对不同的用户而丢失,但有两条关于注册表评论的评论:

  1. HKEY_CURRENT_USER可能与HKEY_USERS相同,因为HKCU只是当前登录用户的HKEY_USERS注册表配置单元。从一个改为另一个不一定能解决任何问题

  2. 修复的原因不太可能是缺少注册表项,因为注册表项是从本地缓存的MSI文件修复的,但丢失的文件需要原始的MSI文件。但是,您说您有关于配置产品的对话框,但您没有说它是否需要原始MSI。如果原始MSI不可用(或者您隐藏它),并且如果对话框需要文件,它将要求MSI。如果MSI被隐藏,并且对话框短暂闪烁,那么它就是一个缺少的HKCU注册表项。

答案 2 :(得分:0)

感谢大家的亲切帮助,我从https://blogs.flexera.com/installtalk/2011/02/you-again-understanding-windows-installer-msi-self-repair/

得到了一些想法

"原因是应用程序是由广告的快捷方式启动的,所以我改变了#34;始终创建快捷方式"在安装程序项目的属性中为false。问题解决了。