想做一个支持升级模式的安装程序,用inno setup,请问怎么做吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了想做一个支持升级模式的安装程序,用inno setup,请问怎么做吗?相关的知识,希望对你有一定的参考价值。

参考技术A 这样吧,升级包用 NSIS 打包也可以啊。NSIS 也是一款和 Inno Setup 一样的采用简洁而高效脚本安装程序制作软件,而且制作出来的界面也惊人的相似,我一直在使用!你说的升级不就是简单的复制新文件到旧的安装目录吧,但是升级的前提,是安装程序必须在注册表中写入键值记录以前安装路径,然后在新的安装程序中读取该键值,取得安装路径,并将升级包安装于该路径。下边以读取 HKEY_LOCAL_MACHINE\SOFTWARE\TENCENT\QQ 分支下的 Install 的键值为例,该键值为 QQ 安装路径。具体的脚本如下:

#安装初始化调用函数

Function .onInit
ReadRegStr $INSTDIR HKLM "SOFTWARE\Tencent\QQ" "Install"
FunctionEnd

#输出目录为 Install 的值
SetOutPath $INSTDIR

这样,在安装时安装目录一栏会自动写上当前 QQ 安装目录,即该键值!如果有疑问可以联系我!

Inno Setup 2 :语法解析

背景概述

??Inno Setup安装程序用编译脚本的方式创建,脚本其实就是一个类似 .INI 文件格式的 ASCII 码文本文件(它不像你想象的那么复杂),其支持Pascal语言。 Unicode Inno Setup支持 UTF-8 编码文本文件。
??脚本用一个“.iss” (表示 Inno Setup 脚本) 的扩展名。脚本控制着安装程序的所有方面。由它指定哪些文件将被安装到什么地方,在哪里创建快捷方式,且被命名为什么。
??脚本文件一般可以用安装程序编译器程序内置的编辑器进行编辑。在你编写完脚本后,下一个最终步骤就是选择安装程序编译器中的“编译”。创建完成后,就可以运行根据你脚本编译的安装程序了。按默认,这个安装程序创建在包含脚本文件目录下的名为“输出”目录中。
??如果你想看看它是怎样工作的,启动安装程序编译器,单击“文件 | 打开”,并选择位于 Inno Setup 安装目录下的 Examples 子目录中的一个脚本文件。(你也可以将这些示例脚本作为你自己编写脚本的模板。)

脚本格式概述

??Inno Setup准备了一些。每个段控制一个不同方面的安装程序部分。每个段使用包含在括号 [ ] 中的段名开始,每个段里是一些相关的条目
??其中有两种不同类型的段:有些像[Setup]段,条目包含指令名和值(格式为Directive=Value),还有一些像[Files]段,条目被参数分隔。如下示例:

[Setup]
AppName=My Program

[Files]
Source: "MyProg.exe"; DestDir: "{app}"

注意,在脚本中指定多个相同名字的段是合法的。

注释

你可以通过在行起始位置价格分号“;”来编写注释(编译时注释将被忽略)。如下示例:

;这是一条注释...

脚本支持A C-like #include指令,用于将文件包含到脚本中。如法如下:

#include "filename.txt"

如果文件名中未提供完整的路径,编译将在包含#include指令的同一目录中查找。文件名用"compiler:"作为前缀的场合中,将在编译器目录中查找文件。

语法解析

1.段中参数

??所有脚本中的段,除[Setup]、[Messages]、[CustomMessages]和[LangOptions]段外,在包含的行中都可有多个各自的参数。下列是[Files]段示例:

[Files]
Source: "MyProg.exe"; DesDir: "{app}"
Source: "MyProg.chm"; DestDir: "{app}"
Source: "MyProg.txt"; DestDir: "{app}"; Flags: isreadme

每个参数都有一个名字组成,然后跟随一个冒号,然后是一个值。除非特别说明,如果参数未指定,将设定为一个默认值。一行中多个参数用分号隔开,并且可以以任何次序出现。
??参数的值如果包含一个用户定义的字符串时,一般来说用双引号(“”)包含,例如文件名。引号使用不是必须的,但这样做可能会在值中的首位或末位被加入空格,已及分号和双引号。
??在一个双引号中嵌入一个引用值,需要使用两个连续的双引号。示例如下:

"This "" contains "" embedded "" quotes"

安装编译器会将它视作:

This " contains " embeded " quotes

如果你希望参数值是一个单个双引号字符,用四个双引号字符:""""。外面的两个用于包含引用的字符,内部两个用于嵌入单个的双引号字符。

2.常量

??项目脚本中大部分地方可以嵌入常量,这些预定义的字符被包含在括弧{ }中。安装程序或卸载程序会根据用户选择和系统配置将这些常量翻译为文字值。例如,{win}在大部分系统中会被翻译为"C:WINDOWS"。
??字符 "{" 通常视作为常量开始。如果你想将它作为实际字符使用,需要使用连续两个 "{"。(对于 "}" 则不需要)
??当在常量后面直接跟随一个反斜杠时,如果常量的值末端已经包含了一个反斜杠号,安装程序或卸载程序将自动删除该反斜杠号。因此,如果一个特殊常量值是 "C:",{constantname}file将翻译为 "C:file",而不是 "C:file"。如果你想防止意外,将反斜杠放入 {}字符中,如 {app}{}。
??常量包括目录常量外壳文件常量其他常量。常用常量列举如下:

  • {app}:用户在安装向导中的选择目标位置页中选定的应用程序目录。如:你在项目中指定了{app}MyProg.exe,而用户选择了"D:MyProg"作为应用程序目录,则安装程序实际安装在了"D:MyProgMyProg.exe"路径。
  • {src}:安装程序文件(即安装包路径)所在目录。如:如在项目中使用了{src}MyProg_Install.exe,而用户选择在"F:"目录进行安装。那么,{src} 值当然不会变,而安装程序会将 {app} 值修改为"F:MyProg.exe"。
  • {srcexe}:安装程序文件的完成路径,如:"D:FeiQFeiQ.exe"。
  • {uninstallexe}:由安装程序提取的下载程序的完整路径名,如"D:FeiQuninstall000.exe"。
  • {log}:日志文件的名称,如果logging没启用,则返回一个空字符。

3.安装脚本段

??安装脚本段 用于解析脚本中各个的含义及使用方法。后事如何,且听下回分解。

以上是关于想做一个支持升级模式的安装程序,用inno setup,请问怎么做吗?的主要内容,如果未能解决你的问题,请参考以下文章

Inno Setup安装程序单例运行

inno setup 安装程序 启动时 显示进度条

Inno Setup区段之Tasks篇

请各位高手帮忙,怎么修改Inno Setup 打包程序安装时的背景外观???

Inno Setup :Hello World

使用 Inno Setup 升级 Windows 服务