品牌型号:惠普 Laptop 15
软件版本:InstallShield 2020
系统:Windows 10
InstallShield是一款专业的安装包制作软件,不过部分开发者在操作过程中难免会遇到一些问题,比如软件卸载完成后,本地还会残留多余文件、空文件夹以及注册表信息,严重影响用户体验。接下来我们就来为大家介绍一下InstallShield卸载为什么不干净,InstallShield卸载链路应怎样梳理的相关内容。
一、InstallShield卸载为什么不干净
卸载之后却发现文件、注册表清理不干净,其实一般是下面这几个原因造成的。
1、工程里新增的自定义文件、日志、用户配置文件,如果没在InstallShield文件视图设置卸载删除属性,默认不会自动删除。卸载结束后,这些文件就留在目标目录,形成残留文件夹。

2、手动新增的注册表键值,要是没有在注册表视图里加上卸载标记,卸载程序就不会主动清理。不少开发者只写了安装写入注册表的逻辑,忘了配置卸载删除,最后注册表项就遗留下来。

3、还有就是InstallShield工程里,OnUninstall、OnMaintUIBefore这类卸载事件脚本如果编写有误,比如判断条件错误、跳转标签写错,清理文件和注册表的代码就不会运行;也有可能是自定义操作顺序不对,导致清理逻辑中途中断。

4、卸载的时候,如果主程序、后台服务或者相关进程还在运行,文件会被系统锁定。卸载程序尝试删除失败,就直接跳过,造成文件残留。通过CustomAction自定义操作动态创建的文件夹、文件或者注册表,MSI原生卸载逻辑识别不到。这部分动态生成的内容不会自动清理,需要开发者单独编写卸载清理代码。
二、InstallShield卸载链路应怎样梳理
了解完InstallShield卸载残留的常见原因,我们再来梳理完整的卸载执行链路。下面就以Basic MSI工程为例给大家讲解,它的整套卸载流程由MSI引擎驱动,每一步都有固定的执行顺序。
1、触发卸载的方式有两种,一种是在控制面板的【程序和功能】里手动执行卸载,另一种是直接运行msiexec命令,通过命令行启动卸载流程。

2、MSI会严格按照顺序,执行InstallExecuteSequence里面的卸载动作,先运行我们配置的各类自定义操作,再去执行文件删除、注册表移除的逻辑。
3、系统会依靠Component组件上的标记来判断,只有组件属性设置为卸载时移除,对应的文件和注册表项才会被清理;没有标记的内容,卸载不会碰。如果卸载中途出现报错,MSI会立刻触发回滚机制,把已经删掉的文件、注册表信息恢复回来,保证系统不会因为卸载中断而损坏。

4、卸载全部执行成功之后,系统会清除这个MSI安装包对应的产品注册记录,在系统的已安装程序列表里把这条产品信息移除。
以上就是InstallShield卸载为什么不干净,InstallShield卸载链路应怎样梳理的全部内容。只有搞懂卸载流程的执行逻辑、系统的清理规则,我们才能精准规避各类残留问题。日常打包中绝大多数卸载不干净的情况,都不是软件bug,而是我们前期配置不到位、资源清理规则没规划全面。所以我们在开发打包工程时,不仅要配置好基础的文件、注册表安装逻辑,更要提前规划完善的卸载清理规则,精准设置组件删除属性,确保常规资源能够跟随卸载流程自动清除。
