InstallShield打包升级时不覆盖原有文件的解决方案

一个.NET Framework的Devexpress UI Windows Form项目,用的InstallShield,前些个版本都好好的,最近几个版本突然就没法更新了,每次更新的时候都覆盖不了原文件,而且这样更新后第一次打开程序(虽然是老程序)还会执行一遍安装,如果安装介质已经没有了,程序都进不去了。折腾了一阵,终于把这个事情的来龙去脉弄清楚了。

为什么没法覆盖

这里得说到InstallShield打的包有两种升级模式,一种是Minor Upgrade,也就是小版本更新,这种更新通常采用覆盖安装的方式,上面说的没法覆盖原文件就是在这种安装方式下出现的,通常1.1更新到1.2这样的就会采用Minor Upgrade;另一种是Major Upgrade,大版本更新,这种更新会先卸载原有的安装,然后装新版本,通常1.x更新到2.x就会采用这种更新方式。

原因:官方文档里有一段话

If any components or features have been deleted from the latest version of the setup, you must perform a major upgrade to avoid potential problems associated with leaving resources and registrations on a machine. Also note that if you move a feature or component to another location in the setup, you have effectively deleted it from its original location.

意思是如果删了某个组件,就没法使用Minor Upgrade了,就得用Major Upgrade。看到这个的时候我是迷茫的,我啥也没删呀。

删了什么?

好在InstallShield可以自己对比两个版本。在Upgrade里加一个Minor Upgrade,然后在Setup To Upgrade里选择之前版本的安装包。

设置好之后Build一下,他就会报错,表示新版本比旧版本缺东西,但是很可惜他不会告诉我们缺什么,只会告诉GUID,如下图。

找回文件

上面的GUID并不会和缺失的文件名关联起来,我们依旧不知道删了什么,那么怎么找回来呢?嗯。。找不回来,不过,有个操作可以抢救一下。

  1. 安装旧版本的软件;
  2. 用新版本的软件更新;
  3. 卸载软件;
  4. 看安装目录下剩下什么。 这个的原理是在更新成新版本后卸载时只会卸载新版本里有的组件,新版本里没有的东西他就会留着,所以剩下的就是删掉的东西。

恢复组件

找到删了什么之后就是得把这些文件加进来了,有可能是文件,也有可能是需要添加引用,然后在InstallShield里把文件加进来。重新加进来的组件他会重新随机生成一个GUID,需要手动改回原来的GUID。理论上是没法严格对应的,我也不知道需不需要严格对应,我就是按着文件名的排序一个个改下来,确实能用。

写在最后

我应该是没有手动删过什么东西的,但还是出现了这个问题,丢失的全是Devexpress的dll,我猜是我在开发过程种尝试了一些组件,某个版本虽然把引用删了,但是没有清理项目,就一直都在,我又加进了InstallShield,后来清理了一下,就没了。或者也有可能是Vistual Studio 和 InstallShield同时开着,突然的变动就导致InstallShield侦测到文件没了,再出现也重新给了我个GUID。有知道原因的大哥请指教一下。

相关推荐
唐青枫5 小时前
C#.NET 定时任务必备:Quartz 全面解析与实战指南
c#·.net
该用户已不存在19 小时前
6个值得收藏的.NET ORM 框架
前端·后端·.net
小码编匠1 天前
WPF 中的高级交互通过右键拖动实现图像灵活缩放
后端·c#·.net
追逐时光者1 天前
一个基于 .NET 开源、简易、轻量级的进销存管理系统
后端·.net
唐青枫1 天前
C#.NET 定时任务与队列利器:Hangfire 完整教程
c#·.net
hez20102 天前
Runtime Async - 步入高性能异步时代
c#·.net·.net core·clr
追逐时光者2 天前
.NET Fiddle:一个方便易用的在线.NET代码编辑工具
后端·.net
mudtools2 天前
.NET驾驭Word之力:玩转文本与格式
c#·.net
唐青枫2 天前
C#.NET 数据库开发提速秘籍:SqlSugar 实战详解
c#·.net
追逐时光者3 天前
精选 4 款基于 .NET 开源、功能强大的 Windows 系统优化工具
后端·.net