关于InstallShield Projects[转]
关于 InstallShield Projects:
InstallShield 可以创建三种类型的项目(Project)
1、InstallScript Project
2、InstallScript MSI Project
3、Basic MSI Project
前者完全是 InstallShield 自己的功能实现
后两者基于 Windows Installer,InstallScript MSI Project 在 Windows Installer 基础上提供了一些 InstallShield 自己的扩展功能支持。
Basic MSI Project 完全基于 Windows Installer,制作出来的安装程序完全符合W2K相关标准,因此比较适合在 Windows 域中使用。
InstallScript MSI Project 制作出来的安装程序中可以见到 xxx.msi 文件。该 msi 文件离开了 InstallShield 的 engine 无法独立运行。而 Basic MSI Project 的 msi 文件是可以独立运行的(在域里面就知道好处了) :)
InstallShield 做补丁的机制也与 MSI 补丁有区别。
关于版本升级补丁和热修复补丁:
说到做补丁,也有很多不同的方法
1、很多如网络游戏、瑞星等,安装了某一个版本比如 1.05,之升级动作是通过检查有否更新的文件——验证文件数字签名(比如MD5摘要信息),但升级后的软件是哪个版本呢?
一个软件的版本实际上是组成该版本的所有特定版本文件的集合。
1的方式可以用Winzip/Winrar等等做一个自解压文件,或者在线升级程序下载新的文件覆盖本地文件,甚至可以用补丁制作工具做成exe,在本地执行以二进制方式修改本地文件等等方式来实现。我见过瑞星工程师在域里就是用一个启动脚本在客户端运行服务器共享目录里的批处理复制文件覆盖本地文件...
2、Hotfix
类似于Windows的hotfix/servicepack这样的方式的补丁,则是一种非线性的升级方式。与方式1类似,但hotfix方式并不是“升级”——Upgrade,更准确地说应该是“补丁”——patch。也就是说,在版本 V1.05 之上有若干补丁,你可以装这些补丁(微软的Service Pack往往包含了前面发布的相关Hotfix和一些其他的工具)中的某一些。
参考“一个软件的版本实际上是组成该版本的所有特定版本文件的集合”,可知这个概念不会影响到当前的“版本”这一概念。
这一点,与1相似。不同的是,技术实现上你可以看到每一个hotfix实际上是一个独立的product installation。
最典型地:每装一个 hotfix,添加删除程序中会多一个条目。如果允许的话(比如hotfix之间没有互相影响),可以单独删除某个hotfix。
3、Transform
从上面看可以知道,Hotfix或者SP并不是将你的软件升级成新版本(或者仅仅升级Build),那么要把V1.05版本升级到2.0怎么做呢?
InstallShield MSI Project/Basic MSI Project 的 patch 实际上就是 Windows Installer 机制中的 trasform。
制作出来的“升级”补丁,也就是“升级包”。
比如在2.0版的安装程序中针对1.05做了一个升级补丁 Update1.05To2.0.msi/Update1.05To2.0.exe,运行之后,你会发现添加删除程序中并没有增加一个新的“产品”项,而原来的 1.05 的项变成了 2.0 的。
这才是真正意义上的升级。
因此,可以把3这种方法看作是
1.05 版本 + 1.05-2.0 版本所需要做出的“所有”改变(不仅仅是文件更新、新增/删除文件,甚至可能有注册表信息、快捷方式甚至数据库配置等等的更改)的集合。假如 1.05 的所有 hotfix 都装了(或者ServicePack),就相当于 2.0 的话,那么你可以理解为 所有 hotfix(sp)加起来就是升级包,呵呵。
InstallShield 提供的补丁制作功能很不错,我每发布一个新版本的客户端,会发布一个新版本的完整安装程序,然后发布一个个针对指定版本的升级包(也可以在一个升级包中支持对多个版本的升级,但文件可能稍大)。
补充说明:
在 InstallShield 有两个功能:
Upgrades
Patch Design
前者主要用于制作全新的完整的安装(升级)包,运行时如果当前计算机上没有旧版本,则执行完整安装。如果有,则升级原有安装。
后者主要制作版本升级补丁,比前者小,更有针对性,比较适合在网络上发布或者用于在线升级。但假如在从一个版本到另外一个版本的升级过程中需要移动某些文件的位置,则一定要用Upgrade方式,而非Patch方式。
另外,help中提到 Patch 方式不能制作 InstallScript MSI Project 的 Major 升级,只能用Upgrade方式。但在实际应用中,我的确用一个 Patch 将客户端软件从 2.5 Build 74 升级到了 3.0 Build 76 版本(2.50.0074 到 3.00.0076)
关于InstallShield Projects[转]的更多相关文章
- 如何设置Installshield中 feature的选中状态
原文:如何设置Installshield中 feature的选中状态 上一篇: 使用strtuts2的iterator标签循环输出二维数组之前一直有筒子问如何设置Installshield中 feat ...
- InstallShield 脚本语言学习笔记
InstallShield脚本语言是类似C语言,利用InstallShield的向导或模板都可以生成基本的脚本程序框架,可以在此基础上按自己的意愿进行修改和添加. 一.基本语法规则 ...
- installshield使用教程
从Visual Studio 2012开始,微软就把自家原来的安装与部署工具彻底废掉了,转而让大家去安装使用第三方的打包工具“InstallShield Limited Edition for Vis ...
- [No00009D]使用visual studio 2015 update3打包程序安装包的简单方法(不需要InstallShield)
注意: 该方法只适用于小型软件的打包发布: 该打包向导可以预先检查需要的运行库支持: 由于visual studio自2012后取消掉了自带的打包程序,如果有需要打包安装,需要使用一个叫用Instal ...
- wordpress默认index主页选择Your Projects提示无法找到项目解决办法?
wordpress_4.5.3默认index主页选择Your Projects下部署的项目发现报错无法找到目标解决办法: 1.其实细心的小伙伴已经发现问题出在哪里,跳转后链接地址发生了错误没有加loc ...
- A Complete List of .NET Open Source Developer Projects
http://scottge.net/2015/07/08/a-complete-list-of-net-open-source-developer-projects/?utm_source=tuic ...
- SSISDB1:使用SSISDB管理SSIS Projects
使用Project Deployment Model,将SSIS Project部署到Integration Services Catalog之后,SSISDB负责管理SSIS Project.在SS ...
- C/S打包 客户端/windows程序 InstallShield
开发完成后,我们可以直接在Debug目录下启动exe,运行程序. 但是,要如何安装,添加到开始菜单.桌面快捷方式.任务栏等.如Office安装效果: 开始菜单: 快捷菜单: 打包步骤: 1.下载Ins ...
- 无法启动"D\projects\hello\Debug\hello.exe" 系统找不到指定的文件。[LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏]
这两天安装Visual Studio遇到这样的一个问题,用自己的电脑和公司的电脑都出现同样的问题.两台电脑都是新系统,按理来说是没有问题的.但是一出现问题,对于我这个小白来说,还是耗费了挺多精力都无果 ...
随机推荐
- ubuntu server配置xmanager
ubuntu server配置xmanager ubuntu是典型的多用户多任务操作系统,通过XDMCP方式可以轻松的实现远程的多用户同时登录ubuntu任务. www.2cto.com ...
- 数学(组合,容斥):COGS 1220. 盒子与球
1220. 盒子与球 ★ 输入文件:boxball.in 输出文件:boxball.out 简单对比 时间限制:1 s 内存限制:128 MB [问题描述] 现有r个互不相同的盒子和n ...
- UTF8与GBK、GB2312等其他字符编码的相互转换
utf8与其他字符编码的转换是国际化必然遇到的问题. windows的api函数对: WideCharToMultiByte和MultiByteToWideChar 个人喜欢的跨平台库: 单纯做字符编 ...
- PHPExcel内存泄漏问题
使用 PHPExcel 来生成 excel 文档是比较消耗内存的,有时候可能会需要通过一个循环来把大数据切分成若干个小的 excel 文档保存来避免内存耗尽. 然而 PHPExcel 存在 circu ...
- C++设计模式---职责链模式
职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这个对象连成一条链,并沿这条链传递该请求,直到有一个对象处理它为止. 这里发出这个请求的客户端并不知道这当中的哪一 ...
- python 参议院文本预处理的一维数组的间隔空间
#!/usr/bin/python import re def pre_process_msg ( msgIn ): if msgIn=="": retur ...
- IOS Dictionary和Model相互转换
// // HYBJSONModel.h // Json2ModelDemo // // Created by huangyibiao on 14-9-15. // Copyright (c) 201 ...
- Java 7之多线程- Semaphore--转载
Semaphore用于保存当前可用许可的数量.是通过共享锁实现的.根据共享锁的获取原则,Semaphore分为"公平信号量"和"非公平信号量". "公 ...
- HTML中常见的各种位置距离以及dom中的坐标讨论
最近在学习JavaScript,特意买了一本犀牛角书来看看,尼玛一千多页,看的我头昏脑涨,翻到DOM这章节,突然记起平常在使用DOM时,碰到了好多的这个dom里面的各种宽度,高度,特意在此写一写,写的 ...
- Java基础知识强化之集合框架笔记04:Collection集合的基本功能测试
1. Collection集合的基本功能测试: package cn.itcast_01; import java.util.ArrayList; import java.util.Collectio ...