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