我们的安装程序包始终将我们软件的新版本部署为完整软件包,而不会触及已安装的版本。用户可以并排运行我们所有版本的软件。我们需要有这个选项,因为我们的一些客户正在从事商业领域的法律法规。
然而,其他用户更愿意升级现有版本,他们不再需要旧版本,并且不受这些规定的约束。
如果有可能,你会如何编写这样的安装包?
我必须承认,我个人还没有见过这样的安装程序。供应商似乎通常选择一条路线并坚持下去。
答案 0 :(得分:1)
您需要两次(更晚)单独安装才能执行此操作。它们之间的基本区别在于,有一个升级表(将对已安装的产品进行重大升级,在程序和功能中替换它),另一个没有升级表,这意味着它只是另一个产品安装在并排方案中。在这两种情况下,它们都有一个与所有已安装产品不同的ProductCode。
你需要一个引导程序,因为我认为你不能以任何其他方式做到这一点。引导程序会询问用户要执行的操作并启动安装选项。您不需要两个MSI文件 - 您可以使用一个带有转换(.mst文件)的MSI来删除(或添加)升级表条目。您可以使用升级表条目在MSI上使用Orca,删除创建转换的条目。对于升级,只需正常启动MSI文件;并行启动MSI的命令行包括TRANSFORMS = [删除升级表的mst文件]。
当然,您可以使用两个单独的MSI文件来完成此操作,但是您已经看到了多个版本的MSI文件,并且可能不想添加更多。
可能有一个更简单的替代方法:执行卸载旧产品的RemoveExistingProducts操作。如果您有一种方法可以检测(例如通过属性值)用户想要并排安装,那么您可以使RemoveExistingProducts操作以该属性为条件。