Windows Installer - 强制用户通过“添加”删除程序

时间:2011-05-01 22:34:17

标签: visual-studio-2005 installer windows-installer custom-action orca

我们有一个用Visual Studio 2005 Installer编写的安装程序解决方案;调用C#自定义操作,我们遇到了一个已知问题,即在升级时 - 运行旧安装代码而不是新代码,因为Windows正在运行自定义操作dll的缓存版本。我们知道这一点,虽然没有关于它的月亮 - 我们继续前进。

当我们发布新版本的安装程序并且用户运行它时,我们现在希望它检查是否安装了更早版本 - 如果有的话;我们想要显示一条消息,告诉他们必须通过“添加/删除程序”删除旧版本。我们知道如果他们进行手动卸载然后安装,那么一切都很好而且花花公子 - 但是我们通过文档告诉用户多少次并不重要;这是他们必须做的 - 他们仍然会尝试运行新的安装程序,而不是先删除旧版本。

因此,我们想提出一条信息,从而强迫他们告诉他们!我见过一些安装程序这样做(虽然当然不确定使用什么安装程序包来创建这些)。我们只有VS 2005,当然还有orca !!

干杯,

克里斯。

2 个答案:

答案 0 :(得分:2)

这可以通过自定义启动条件来完成:

例如,如果搜索属性为OLD_VERSION,则启动条件如下所示:

条件:NOT OLD_VERSION

说明:An older version was found. Please uninstall it using "Programs and Features" in Control Panel.

当OLD_VERSION属性设置为某个值(找到旧版本)时,此启动条件将显示该消息并停止安装过程。

答案 1 :(得分:1)

这没有多大意义。您是否记得在新设置中更改包GUID?包GUID标识特定的安装文件,如果两个MSI文件具有相同的GUID,则无论它们是否存在,它们都将被视为同一文件。这可能会触发要调用的MSI的缓存版本,并且各种各样的地狱都会松动。

我建议您阅读“主要升级”,这将允许在安装新版本之前自动卸载现有版本。在部署到野外之前,您还需要确保了解该技术的基础知识。您绝不能为任何MSI文件使用相同的包GUID。它几乎总是错的,并会导致非常神秘的问题。

我无法在此处编写完整的主要升级解决方案,但基本上它涉及创建MSI的“升级”表以检测要卸载的版本。您需要更改包裹代码,产品代码和版本号(仅限3位数)并保持相同的升级代码(两个具有相同升级代码的MSI文件“知道”它们是相关的 - 即它们来自同一产品系列) 。检查MSDN以获取主要升级样本。

NB!如果已将具有重复包GUID的MSI文件部署到开发人员计算机,则可能存在必须使用MSIZap或类似方法清除的杂散安装。请小心,或者更好地在干净的测试系统上测试新的安装程序。开发人员系统充满了垃圾,通常不适合MSI测试。