• InstallShield 打包如何做到支持升级安装 [InstallShield support upgrade installation]


    升级安装类型介绍

    升级安装主要有三种类型,Small Upgrade,Minor Upgrade, Major Upgrade。

    官方最推荐的是Minor Upgrade,即使是主版本的升级(比如1.0->2.0),也建议使用Minor Upgrade的方式,因为Minor Upgrade是一种覆盖安装,不需要再重新选择路径、输入参数等操作,直接操作即可。

    Major Upgrade的缺点:1. 是对版本号(Version Format:必须是主版本修改)、Product Code(Product Code必须有变化)有严格的要求,2.是安装相当于重新安装,需要重新选择安装路径、重新输入界面上的配置参数。所以不到万不得已,不推荐Major Upgrade

    制作升级安装包步骤

    在上一个版本的ism文件的基础上修改版本号

    配置文件备份与恢复

    通过编写InstallScript脚本,在新版本安装包替换旧文件之前,调用编写的“BackupConfigFiles” Custom Actions备份包含了配置的配置文件,然后在替换完文件后,在把刚备份的配置文件恢复到指定目录中,如下图所示:

    BackupConfigFile的Custom Actions

    因为在备份配置文件阶段,还没有正式替换旧文件,所以如果想调用安装包里的文件,只能把这些文件放到Support Files里,所以这里调用的BackupConfigFilesForPatch.bat就是放在Support Files里面

     

     BackupConfigFilesForPatch.bat 里就是拷贝的cmd命令

     如果发现制作的Installshield升级安装包无法替换文件,请参考这个链接解决

    版本间文件删除恢复

    如果您在版本间(比如1.0->2.0)删除了文件,那么你会发现新的安装包虽然能安装成功,并且替换版本号,但是所有的文件都没有替换,所有的文件都是旧的。这个时候可以参考这个连接解决。

    Minor Upgrade不允许删除以前的打包文件,如果删除了就不能再做Minor Upgrade Installation了,只能走Major Upgrade,但是不建议这么做,最好是使用脚本在打包的时候恢复这些文件。

    下面的方法可以查询哪些文件被删除,能否制作从1.0升级到2.0的安装包。

    打开2.0的ism文件,在最左侧找到Upgrades的tab

     选择1.0的exe安装文件

     点击“Build”按钮,InstallShield会自动分析哪些文件被删除了。必须把删除的文件找回来,如下图,就有4个文件被删除了

    动态文件压缩与替换

    网站项目的文件打包经常会带版本号,如“app.dc7b77af.css”,每次build编译出来的文件都不一样,为了解决这样的问题,我们在打包的时候要把这些文件打包成压缩包,在安装的时候在解压即可。

    执行cmd命令把文件夹通过在build server上的7-zip软件压缩成.exe文件,这种exe文件通过bat就可以轻松解压

     在ism的自定义脚本里,设置好执行命令和顺序就可以轻松解压,看清下面的红框里的重点。命令很简单,就是   ***.exe -o"解压路径" -y

    常见问题

    获取Support Dir路径为空

    制作的升级安装包无法替换文件

    配置文件被替换,无法保留配置文件

    如何优雅的恢复之前弃用但Upgrade必须要用的文件

    如何解决build中带版本号的文件,不能把之前所有build的文件都累加吧?

     

  • 相关阅读:
    JDK路径下目录的介绍及环境变量配置
    Eclipse显示或隐藏项目
    linux 上传文件 rz命令 提示command not found 解决方法
    Query failed with error code 96 and error message 'Executor error during find command: OperationFailed: Sort operation used more than the maximum 33554432 bytes of RAM. Add an index, or specify a smal
    eclipse设置类和方的注释模板
    Xml 将一个Xml字节流写入到Dataset里面
    C# List<object> 转换为List<string>、转换为 string数组、转换为一个字符串用分隔符 隔开
    SQL 把m或f,更改为男女
    C# 去掉字符串里的分隔符(该分隔符可以是一个字符串)
    C# 通过一个开始时间和结束时间 按【AddDays】拆分成一个数组
  • 原文地址:https://www.cnblogs.com/zhengshuangliang/p/13653527.html
Copyright © 2020-2023  润新知