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

|| 我们有一个用Visual Studio 2005安装程序编写的安装程序解决方案。调用C#自定义操作,而我们遇到了一个已知问题,即在升级时-运行的是旧安装代码,而不是新代码,因为Windows正在运行该自定义操作dll的缓存版本。我们知道这一点,尽管还没有结束,但我们已经前进了。 现在,当我们发布安装程序的新版本并由用户运行时,我们希望它检查是否安装了安全性更高的版本-如果有,则安装该版本。我们想显示一条消息,告诉他们必须通过“添加/删除程序”删除旧版本。我们知道,如果他们先进行手动卸载然后再进行安装,那么一切都会好起来的-但是,通过文档告诉用户多少次并不重要。这就是他们必须要做的-他们仍将尝试并仅运行新的安装程序,而无需先删除旧版本。 因此,我们想发布一个信息,从而迫使他们按要求进行操作!我已经看到一些安装程序可以执行此操作(尽管当然不能确定使用哪个安装程序包来创建它们)。我们只有VS 2005,当然还有逆戟鲸! 干杯, 克里斯。     
已邀请:
这可以通过自定义启动条件来完成: 创建一个确定是否安装了旧版本的搜索(您可以搜索组件,注册表项或文件) 使用搜索属性作为自定义启动条件 例如,如果搜索属性为OLD_VERSION,则启动条件如下所示: 条件:
NOT OLD_VERSION
说明:
An older version was found. Please uninstall it using \"Programs and Features\" in Control Panel.
当OLD_VERSION属性设置为一个值(找到较旧的版本)时,此启动条件将显示消息并停止安装过程。     
这不太有意义。您还记得在新设置中更改软件包GUID吗?程序包GUID标识一个特定的安装文件,并且如果两个MSI文件具有相同的GUID,则无论它们是否存在,都将被视为同一文件。这可能会触发要调用的MSI缓存版本,并且各种情况都将松散。 我建议阅读“主要升级”,这将允许在安装新版本之前自动卸载现有版本。部署到野外之前,还需要确保您了解该技术的基础。您绝不能对任何MSI文件使用相同的程序包GUID。实际上,它总是错误的,并且会导致非常神秘的问题。 我无法在此处写出整个主要的升级解决方案,但基本上,它涉及编写MSI的“ Upgrade \”表以检测要卸载的版本。您需要更改程序包代码,产品代码和版本号(仅3位数字),并保持相同的升级代码(两个具有相同升级代码“知道”的MSI文件是相关的-即它们来自同一产品)家庭)。检查MSDN以获取主要升级的样本。 注意!如果您已将具有重复软件包GUID的MSI文件部署到您的开发人员计算机,则可能有杂散的安装,必须使用MSIZap或类似工具清除。请谨慎使用,或者最好在干净的测试系统上测试新安装程序。开发人员系统到处都是垃圾,通常不适用于MSI测试。     

要回复问题请先登录注册