MSI,修复运行,但我不知道为什么

时间:2012-09-20 16:19:07

标签: windows-xp windows-installer installshield

我有一个我用Installshield 2012 Pro维护的MSI包。

该软件包再次创建几年,需要定期维护,因为我们的开发团队发布了安装的新版本。此MSI已在许多地方使用,在许多机器上没有问题。

在一个客户位置,他们在20台机器上安装了大约20份应用程序。每台机器都完全相同。 由于未知原因,与该应用程序相关的注册表项会定期丢失。不是全部,一个或两个选择......相同的条目总是丢失。

到目前为止,我们未能找到确切的根本原因,但是我们的一位支持工程师注意到在打开应用程序快捷方式时出现了MSI修复对话框。在此之后,注册表项丢失了。

在缺少的每个注册表项实例上,我们已从c:\ Windows \ Installer目录中删除了MSI。在机器上我们也做了这个改变,到目前为止注册表的更改并没有再次消失。

这让我觉得MSI在修复过程中以某种方式删除了所选的注册表项,但我不明白如何。

  • 与删除的条目相同的密钥下至少有50个注册表项。 (这些是由应用程序而不是安装程序创建的)
  • MSI包在安装期间根本不插入任何键
  • 根本没有自定义操作
  • 我在整个MSI中只设置了一个密钥文件,这是针对Windows \ system32中安装的组件
  • 所有快捷方式都没有'广告'

在从安装程序目录中删除MSI与不再发生之间似乎存在明确的联系,但我无法看到MSI中的内容可能导致特定的注册表项消失。

我意识到这对我的MSI或客户系统来说是主观的确切原因,所以我一般尽可能地问:

  • 考虑到上述内容,为什么Windows会启动MSI修复功能
  • 考虑到上述内容,MSI可以改变注册表吗
  • 无论如何安装MSI以禁用此MSI的自动修复功能?
  • 我应该如何更改MSI以确保不会发生自动修复?

谢谢

1 个答案:

答案 0 :(得分:0)

首先证明汽车维修是否与您的产品相关。检查应用程序事件日志中是否有导致Windows Installer启动自动修复的组件ID。然后,如果它是安装程序的一部分,请找出原因。

您的MSI似乎不太可能改变注册表。虽然你没有具体说没有RemoveRegistry表条目,但很难想象有任何意外泄漏。

禁止自动修复的方法很糟糕(有些是全局的,有些涉及不注册安装程序)。避免它们。

首先弄清楚什么是错的。然后弄清楚如何解决它。例如,如果在步骤1中确定触发自动修复的组件是安装的一部分,则可能在发生这种情况的计算机上设置logging policy,这样您就可以获得详细的MSI日志。