• Installshield 总结系列之Basic MSI


    为什么要写写篇博客呢? 目的就是方便自己日后复习的时候,自己的总结以后可以看一下,同时对于别人也是一个参考,帮助那些刚入门的人。

    1. 什么是Basic MSI Project

    Basic MSI project就是制作基于Windows Installer Engine的安装Installshield包(Installshield提供有限的支持,如Prevent Downgrade等),即我们常见的MSI格式的安装文件(也可以是以EXE形式的安装文件),只支持一些基本的命令和Windows的API,一句话,只能使用Windows Installer Engine支持的命令和API。

    2: Multi Release, Multi Instance

    什么情况下会需要Multi Release呢?

    一个产品,它有多种安装版本,如如权限的不同,就好象试用版,正式版,专业版之类的。但安装的主体逻辑是一样的,可以把它们放在同一个MSI Project里面。

    什么情况系需要Multi Instance

    一个产品A是另外多个产品的一部分,为了独立维护(安装、卸载、神经)产品A,所以,需要独立的Product Code, Upgrade Code。即需要Multi Instance.

    2.2如何定制不同的Release, Instance

    打包过程的定制:这个可以借助于Release Flag, 每个Release可以定义支持的Release Flag, 同时在Componet那边标上对应的Flag.

    安装过程的定制:可以在component的condition里面设置对应的条件,只有在满足条件的情况下,这个component才会被安装。

    脚本执行的定制:在Release里面有一个Predefine Processor的选项,定义一个条件编译护符,在脚本里面写 #ifdef …#endif

    3.Upgrade

    对应Basic MSI, upgrade 分为major upgrade, minor upgrade.

    什么情况下会发生minor upgrade,版本的上涨,package code的变化都会导致minor upgrade.

    什么情况下需要做major upgrade. component的ID发生变化,component本身被删除或者属性被修改。merge modle的删除,修改。

                                                  Release的msi name被修改等都需要做major ugrade,否则安装、维护的过程会出现问题。

    PS:自己可以在Upgrade那一个页面,定制minor upgrade, major upgrade的行为。

    PS:对应minor upgrade, version的change不能只是AA.BB.CC.DD的最后“DD”部分的变化,否则component不会被Overwrite。

    4: Prevent Downgrade

    Windows Installer本身是基于Product Code来管理应用程序的,对应相同的Product Code的产品,它不支持降级。

    PS:在Installshield 2011 Basic MSI Project中,Multi Instance的Release是可以进行降级的!(应该是Installshield的一个缺陷!)。

    这里的Prevent Downgrade机制,是针对Major Upgrade而言。

    但是对于Installshield安装包,它还支持Major Upgrade,即程序变化比较大的时候,如component本身发生了删除时,就需要做major upgrade。Major upgrade意味着Product Code需要发生变化,而Windows Installer就会把它们当作两个独立的安装包。加入Upgrade Code,就可以把这两个产品联系起来,并做一些自定义的动作(在Upgrade的页面进行设置),如安装新产品前对老产品进行卸载。在Install Shield 2009后,就有一套默认的机制来Prevent Downgrade.

    5.Silent Installation以及UI Level

    对应Basic MSI project来说,静默安装要注意:
    1. UI Sequence在静默安装时,不会被执行。

    2. UI level=2表上静默安装,在对应的脚本的地方,需要进行处理,否则静默安装会被block住。静默安装时,只有系统自己弹出的窗口会被忽略,用户自己的messagebox还是会弹出来。

    6.Support Drectory

    Basic MSI和Installshield Project不太一样的地方是,support dir需要用MSIGetProperty来获取。

    还有就是获取当前安装包执行的路径:它包括以exe方式运行时,setup.exe的位置,以及以msi方式运行时的位置。它们分别对应”SETUPDIR” “SRCDIR”。即需要考虑这两种情况。

    如果上面有写的不对的,可以用以下方式进行交流。

    邮箱:whp_lcyz@163.com

  • 相关阅读:
    Filter过滤器
    jsp-JSTL表达式
    jsp-EL表达式
    JSP概述
    servlet编码问题
    微信开放平台-踩坑1
    Supervisor的安装以及使用
    laravel-mix的安装
    Laravel框架中打印sql
    Laravel 5.7 使用 PHP artisan migrate 的问题
  • 原文地址:https://www.cnblogs.com/jamesmile/p/2711440.html
Copyright © 2020-2023  润新知