0

我有一个使用 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 以确保不会发生自动修复?

谢谢

4

1 回答 1

0

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

您的 MSI 似乎不太可能更改注册表。尽管您没有具体说没有 RemoveRegistry 表条目,但很难想象有任何意外潜入。

只有一些不好的方法可以禁用自动修复(一些是全局的,一些涉及不注册您的安装程序)。避开他们。

首先弄清楚是什么问题。然后想办法解决它。例如,如果在步骤 1 中您确定触发自动修复的组件是您安装的一部分,则可能在发生这种情况的机器上设置日志记录策略,以便您可以获得详细的 MSI 日志。

于 2012-09-21T12:17:39.827 回答