当前位置: 首页 > news >正文

[程序安装包制作] Advanced Installer 备忘

Product Information - Product Details

这个重点是Product Version。讲这个之前,首先要知道Product Code和Upgrade Code这两个属性,同时大家不要被这两个英文词语的字面意思所以迷惑。

同一款产品,不同的版本的安装包,Product Code必须不同,但Upgrade Code必须相同。

例如,现在有一款软件叫"Hello World”,已经制作了1.0.0的安装包,现在要制作1.0.1安装包。1.0.0与1.0.1的Upgrade Code是相同的,否则就会视为不同产品的安装包,安装时就会产生两个卸载项目。而同时1.0.0与1.0.1的Product Code是不一样的,否则系统会误认为同一版本的安装包,到时候就无法正确安装了。

了解了上述的含义就好理解Product Version。只要改变Product Version的版本号,就会自动改变Product Code,方便我们制作完全升级包。

注意的是,Product Version有效版本位支持到第三位即1.0.0,当你输入1.0.0.1保存项目时,会提示如下信息:

 Windows Installer是不认第四位版本号的,第四位的变化并不会使这个安装包变成新版本的安装包(即不会改变安装包的Product Code),所以如果制作完全升级包,新版本号必须从第三位开始更改


P.S.:笔者一般以发布日期作为第四版本号,例如,10月25日发布的版本号就为2.5.3.1025

 

User Interface - Dialogs
在Dialogs树形菜单点击ExitDialog,预览窗体下方就会出现配置信息,如下图

这里可以让你配置安装完成后的选择是否阅读ReadMe或是否立刻启动应用程序。


User Interface - Translations
如果你的安装包有多国语言安装的需要,在这里勾选安装包的语言,十分方便,如下图

要注意下面三个选项

Create separate packge 生成多个语言的安装包
Create separate packge and a multilingual packge 生成多个语言的安装包和一个混合包
Create only a multilingual packge 只生成混合包(混合包就是多个语言在一个安装包内)

 

Custom Behavior - Search
笔者觉得这款工具十分容易使用,其中一个原因就是Custom Behavior相当好用。
在Search你可以添加你想要搜索的信息,注册表,安装文件,配置文件等等,这些搜索信息会提供给Custom Actions使用,后面会讲到
例如,这里我要安装程序搜索一下PL2303的USB驱动的版本号

    

 

Custom Behavior - Custom Actions
这里是设置安装的自选行为,例如安装文件后执行一些应用或批处理,就可以在这里设置。
例如,这里我要在安装文件后执行安装USB驱动

这里顺便讲讲里面的Excution Condition设置

Excution Condition故名思议就是执行条件,前面定义的Search在这里就派上用场了
打开编辑框,琳琅满目的button和combobox……我们之前定义的Search就在Property里可以找到,如图

然后在textbox里填写好逻辑表达式就OK了,例如,这里的意思是,USB驱动的版本号不等于"1.3.0"。

 

注意:Vista以上的安装程序,有可能由于UAC的原因使得运行程序的Action执行不成功,导致安装失败。
笔者也是在这里纠结了很久,最后在官方FAQ里,了解到,只要在Excution Options里,选择Deferred with no impersonation,就可以解决UAC的干扰问题。

 

转载于:https://www.cnblogs.com/xyq/archive/2010/10/21/1857172.html

相关文章:

  • DR与主/从路由器的区别
  • Linq to entity 中 实现 Sql 中的like 的两个方法小解
  • DIV垂直居中的各种方法
  • unicode变形一句话突破web防火墙过滤
  • Silverlight for Windows Phone Toolkit升级 新增四个控件
  • 英文书信常用语
  • 栽下愉悦也需勤
  • 李宁:从106块金牌到16亿身价《前程密码》
  • 算法学习--二叉查找树
  • Android 中文 API 文档 (44) —— Chronometer.OnChronometerTickListener
  • Oracle 存储过程返回结果集怎么这么费劲?
  • c#串口开发源代码——这是我09年一个写的一个非常简陋的通用的串口调试程序...
  • 定制xDoclet标签自动生成框架配置
  • RHEL 5.4 ,配置 yum为本地源
  • 测试你防火墙是否安全
  • SegmentFault for Android 3.0 发布
  • Akka系列(七):Actor持久化之Akka persistence
  • gcc介绍及安装
  • gf框架之分页模块(五) - 自定义分页
  • MD5加密原理解析及OC版原理实现
  • OSS Web直传 (文件图片)
  • PV统计优化设计
  • Python实现BT种子转化为磁力链接【实战】
  • Sublime Text 2/3 绑定Eclipse快捷键
  • ucore操作系统实验笔记 - 重新理解中断
  • use Google search engine
  • 安装python包到指定虚拟环境
  • 反思总结然后整装待发
  • 工作中总结前端开发流程--vue项目
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 简单数学运算程序(不定期更新)
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 数据仓库的几种建模方法
  • 思维导图—你不知道的JavaScript中卷
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 用jquery写贪吃蛇
  • Prometheus VS InfluxDB
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • ​如何在iOS手机上查看应用日志
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • #QT(TCP网络编程-服务端)
  • #每天一道面试题# 什么是MySQL的回表查询
  • $(selector).each()和$.each()的区别
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (pojstep1.1.2)2654(直叙式模拟)
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (附源码)ssm码农论坛 毕业设计 231126
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (实战篇)如何缓存数据
  • (一)u-boot-nand.bin的下载
  • (转)VC++中ondraw在什么时候调用的
  • (转)拼包函数及网络封包的异常处理(含代码)
  • ***监测系统的构建(chkrootkit )
  • ***利用Ms05002溢出找“肉鸡