我有一个部署项目,它不允许我安装旧版本。msi 文件说首先从添加/删除程序中卸载程序。这不是一个好的用户体验。我该怎么做才能让安装程序先删除软件,然后再安装新版本?
5 回答
这很棘手,您必须执行以下步骤,
- 将删除以前的安装设置为 True
- 将检测新版本设置为 True
- 您的 C# 程序的版本必须随着每次部署而增加
- 您应该将安装程序的版本更改为更高的版本,它会要求您更改产品代码,请选择“是”。
- 不要更改您的升级代码,让它保持不变。
如果您没有正确执行第三步,安装程序仍会安装并保留旧文件,如果您更改了内容,则每个文件的文件版本必须是新的。
我尝试了一些场景,也许这会帮助某人节省一些时间
如果程序集版本更改并且项目安装程序版本更改(ProductCode Guid 也更改)-> 应用程序安装在现有的顶部-> dll 和 exe 版本得到更新-> 如果安装到的路径不同,则删除现有的初始安装的项目文件从他们安装的地方。(以及此后制作的文件)
如果程序集版本更改并且项目安装程序版本更改(没有更改 ProductCode Guid)-> 要求用户手动删除应用程序-> 如果他们继续并首先从控制面板中删除,则可以安装应用程序并更新 dll 和 exe到新版本
如果只有程序集版本更改,或者只有项目安装程序版本更改(没有更改 ProductCode Guid) -> 要求用户手动删除应用程序 -> 如果他们继续并先从控制面板中删除,则可以安装应用程序并安装 dll 和exe更新到新版本
如果仅项目安装程序版本更改(ProductCode Guid 也更改)-> MSI 完成安装过程,但 dll 和 exe 不更改版本-它们是根据程序集版本,并替换为相同程序集构建版本的文件-> IF安装到的路径不同,现有的初始安装的项目文件将从安装位置删除。(此后制作的任何文件仍然存在)
如果项目安装程序版本更改(ProductCode Guid 也更改)并且程序集版本低于已安装版本 -> 安装将开始,最终用户会被告知安装失败,因为旧版本。
设置设置项目属性RemovePreviousVersions True
但是您必须在两个设置应用程序中使用相同的UpgradeCode
您有时可以在安装新版本后执行此操作,旧产品将保持不变。
您需要更改 RemoveExistingProducts 的序列号,它必须安排在 Install Validate 操作和 InstallInitialize 之间。您可以通过 ORCA 执行此操作
对于 Ex InstallValidate=1400 InstallInitialize =1500
然后 RemoveExistingProducts =1450
如果您使用的是 Visual Studio 2012 或更高版本,
- 如果解决方案文件夹下已经有安装程序文件夹,只需打开安装程序下的项目助手并双击它。
2.打开项目助手后,您会看到应用信息,在这里您可以输入您要更改的版本。