Inno Setup的使用笔记
Inno Setup的使用笔记
项目需要,前些天学习了Inno Setup这跨打包工具的使用方法,收获蛮多的。由于之前也没有打包过,一时间学起来非常吃力。vs自带有打包的程序,但是自己也都从来没有用过,不知道 强大不强大,反正目前就觉得Inno Setup挺不错的。听说什么酷狗啊,QQ啊,金山啊这种大牛都是用这个打包的。吃惊!
界面美化这块没有做,如果以后有时间,可以再去看看,反正现在不想看了,也都挺郁闷的。
这 个是我放在D盘的东西,安装是生成安装包的的输入文件夹,lisense.txt是安装的协议说明,test2.iss就是inno setup的脚本文件了,后缀好像是Inno Setup Script的简写。x文件夹里面放的是数据,比如说可执行文件exe,数据库文件,各种dll,data文件夹里面放的是各种应用文件,net里面放了 一个.net framework2.0和一个flash 10安装文件。
; 脚本由 Inno Setup 脚本向导 生成!
; 有关创建 Inno Setup 脚本文件的详细资料请查阅帮助文档!
#define MyAppName "q-lin"
#define MyAppName2 "2005模块"
#define MyAppName3 "0701办"
#define MyAppVersion "2012"
#define IncludeFramework true
#define IncludeFlash true
#define IsExternal ""
#define MyAppPublisher "广州hoho"
#define MyAppURL "http://www.hoho.com"
#define MyAppExeName "Kao.exe"
[Setup]
; 注: AppId的值为单独标识该应用程序。
; 不要为其他安装程序使用相同的AppId值。
; (生成新的GUID,点击 工具|在IDE中生成GUID。
;AppId值贮存于卸载日志文件 (unins???.dat) 内部
AppId={{5154D16C-1E4E-417E-99B0-36669AF5048C}
;程序名
AppName={#MyAppName}
;版本号
AppVersion={#MyAppVersion}
;发布者
AppPublisher={#MyAppPublisher}
;发布者链接
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
;自述文件
;InfoAfterFile=D:\打包测试\info.txt
;安装协议
LicenseFile=D:\打包测试\license.txt
;版权消息
AppCopyright=Copyright (C) 2011-2012 My Company, Inc
ShowComponentSizes=yes
;安装目录
;DefaultDirName={pf}\{#MyAppName2}
DefaultDirName=d:\考无忧\{#MyAppName2}
;默认开始菜单栏
DefaultGroupName={#MyAppName3}
;输出文件夹
OutputDir=D:\打包测试\安装
;输出文件名
OutputBaseFilename=setup
;安装的图标
SetupIconFile=D:\打包测试\Setup.ico
;压缩相关
Compression=lzma
SolidCompression=yes
PrivilegesRequired=none
;背景图片(左边)
WizardImageFile=f.bmp
;右上角图片
;WizardSmallImageFile=f.bmp
[Languages]
Name: "chinesesimp"; MessagesFile: "compiler:Default.isl"
[Tasks]
Name:
"desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription:
"{cm:AdditionalIcons}"; Flags: checkablealone; OnlyBelowVersion: 0,6.1
[Files]
#if IncludeFlash
Source: "D:\打包测试\x\net\flash10.exe"; DestDir: "{tmp}"; Flags: ignoreversion {#IsExternal};Check:NeedsFlash
#endif
//Flags: onlyifdoesntexist 文件存在的时才复制过去。
Source: "D:\打包测试\x\*"; DestDir: "{app}"; Flags: ignoreversion {#IsExternal}
Source: "D:\打包测试\x\data\*"; DestDir: "{app}\data"; Flags: ignoreversion {#IsExternal}
;Source: "D:\打包测试\x\EasyKao.exe"; DestDir: "{app}"; Flags: sharedfile
;如果IncludeFramework为真则解压到安装目录(但事实上似乎没有用这个)
#if IncludeFramework
;Check:NeedsFramework,检查这个函数,是否返回真,如果为真,则解压到安装目录
Source: "D:\打包测试\x\net\dotnetfx.exe"; DestDir: "{tmp}"; Flags: ignoreversion {#IsExternal}; Check: NeedsFramework
#endif
;注意: 不要在任何共享系统文件上使用“Flags: ignoreversion”,意为不比较版本信息
[Icons]
Name: "{group}\{#MyAppName2}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName2}"; Filename: "{app}\{#MyAppExeName}"
[Run]
#if IncludeFlash
Filename: {tmp}\flash10.exe;Parameters:"/install";WorkingDir: {tmp}; Flags: skipifdoesntexist; StatusMsg: "正在安装FLASH插件"
#endif
;如果IncludeFramework为真则安装这个文件
#if IncludeFramework
;静默安装参数Parameters: "/q:a /c:""install /l /q"""
Filename:
{tmp}\dotnetfx.exe; Parameters: "/q:a /c:""install /l /q""";
WorkingDir: {tmp}; Flags: skipifdoesntexist; StatusMsg: "正在安装.net
2.0组件,请稍侯"
#endif
Filename: "{app}\Kao.exe"; Description: "立即运行"; Flags: postinstall nowait skipifsilent unchecked
;指定在卸载第一步要执行的程序数
;[UninstallRun]
;Filename:
{win}\Microsoft.NET\Framework\v4.0.30319\CasPol.exe; Parameters: "-q
-machine -remgroup ""{#MyAppName}"""; Flags: skipifdoesntexist
runhidden;
[code]
//默认选择同意(安装的协议)
procedure InitializeWizard();
begin
WizardForm.LICENSEACCEPTEDRADIO.Checked := true;
end;
// Indicates whether .NET Framework 2.0 is installed.
function IsDotNET40Detected(): boolean;
var
success: boolean;
install: DWord;
begin
success := RegQueryDWordValue(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Client','Install',install)
if success and (install = 1)then
begin
Result := true;
end
ELSE
begin
success := RegQueryDWordValue(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5', 'Install', install)
if success and (install = 1)then
begin
Result := true;
end
else
begin
success := RegQueryDWordValue(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.0', 'Install', install)
if success and (install = 1)then
begin
Result := true;
end
else
begin
success := RegQueryDWordValue(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v2.0.50727', 'Install', install)
if success and (install = 1)then
begin
Result := true;
end
else
Result:=false;
end;
end;
end;
end;
//检测是否需要安装.netframework
function NeedsFramework(): Boolean;
begin
Result := (IsDotNET40Detected = false);
end;
function IsFlashDetected(): boolean;
var
success2: boolean;
install: DWord;
begin
success2 := RegValueExists(HKLM, 'SOFTWARE\Macromedia\FlashPlayer','CurrentVersion')
if success2 then
begin
//MsgBox('你好。'+inttostr(install), mbInformation, MB_OK);
Result := true;
end
else
// MsgBox('没有'+inttostr(install), mbInformation, MB_OK);
Result := false;
end;
//检测是否需要安装Flash Player
function NeedsFlash(): Boolean;
begin
Result := (IsFlashDetected = false);
end;
HKEY_LOCAL_MACHINE\SOFTWARE\Macromedia\FlashPlayer\SafeVersions在这里,如果安装了,则会有6.0、7.0……10.0、11.0
在关于检测flash player这个问题上,有一些需要注意的地方。比如说, 安装10版本的时候必须把注册表里面的11和10都删除,否则不能安装。 11版本则可以重复安装本版本及以下版本。
为什么,我只检测是否有CurrentVersion而已,而不检测是否是10还是11,是因为似乎,只有10以上版本才出现在CurrentVersion这里。 好像10以下版本都是独立的player。
注:我之前是没有做flash player检测的,而是每一次无论如何都安装一遍,如果有高版本的flash player的话,安装过程则会自动退出安装flash player这个过程。
有的时候,inno setup程序在安装falsh的时候会产生错误,这个时候就会回滚,撤销flash所有接下来的执行。
为
什么会产生这种错误呢,有一种情况是这样的。比如说,我在安装flash
player的时候会把安装的文件放在这个目录下,C:\WINDOWS\system32\Macromed\Flash,当我们卸载的时候,如果不是
用该flash player的卸载程序就会卸载不干净,虽然注册表删得挺干净的,
但
是在这个目录下的文件有些就删不了,比如:Flash32_11_3_300_250.ocx。我们在安装的过程中,如果发现有此文件已经存在(假设我们
安装的flash player是11.0版本),则显示安装错误。在不是静默安装的时候(手动安装)虽然结果显示安装错误,但还是可以用的,
而静默安装则不是,只要有一点错误就会回滚。
Inno Setup的使用笔记的更多相关文章
- Inno Setup 使用笔记
使 用 笔 记https://blog.csdn.net/dongshibo12/article/details/79095971 1.Inno Setup 是什么?Inno Setup 是一个免费的 ...
- C/S打包 客户端/windows程序 Inno Setup
之前介绍过InstallShield打包工具,本文再介绍更加方便的打包工具Inno Setup Inno Setup相对来说,比InstallShield更容易使用,不需要去等VS去创建项目,只要提供 ...
- [Tool]Inno Setup创建软件安装程序。
这篇博客将介绍如何使用Inno Setup创建一个软件安装程序. Inno Setup官网:http://www.jrsoftware.org/isinfo.php. 可以下载到最新的Inno Set ...
- inno setup读取注册表遇到的一个坑
一.背景 目前,公司针对PR开发的一个插件需要发布到64位系统上.该插件包括一个prm格式的文件和若干个DLL文件.其中,prm文件需要复制到PR公共插件目录下,DLL需要复制到Windows系统目录 ...
- 一个简单的inno setup模板
一.模板代码 基本功能包括多路径安装.多语言.自定义图标. [Setup] ShowLanguageDialog=yes AppCopyright=Copyright Reserved(C) , 36 ...
- Inno Setup 版本 5.5.3+ 简体中文语言包
; *** Inno Setup 版本 + 简体中文消息 *** [LangOptions] LanguageName=<7B80><4F53><> Languag ...
- 解决Inno Setup制作中文安装包在非中文系统上显示乱码的问题
尼玛,好几个月没更新了.囧... 目前我司新的客户端开发已经接近尾声,该改的bug已经改完,该重构的地方也都差不多了.视觉效果也已经根据美工的样式改完了.所以,就差制作安装包了.正所谓万事俱备,只欠东 ...
- Inno Setup怎样创建一个自动申请管理员身份运行的快捷
如果你使用的是 Unicode 版本的 Inno Setup,那么以下是更为专业的解决方法. 这是 mlaan 提及的再一种方法. QUOTE( CodeAutomation3.iss) ...
- Inno Setup制作安装包的几个问题
1. 卸载时,如何判断应用程序是否运行 InnoSetup 提供变量AppMutex,用来保存应用程序的Mutex名称.现在很多应用程序都是唯一实例运行.这样避免配置文件被错误修改以及其他很多衍 ...
随机推荐
- 经典DP 二维换一维
HDU 1024 Max Sum Plus Plus // dp[i][j] = max(dp[i][j-1], dp[i-1][t]) + num[j] // pre[j-1] 存放dp[i-1] ...
- FZU 1911 Construct a Matrix
题目链接:Construct a Matrix 题意:构造一个矩阵,要求矩阵的每行每列的和都不相同.矩阵的边长是前n项斐波那契的和. 思路:由sn = 2*(fn-1)+(fn-2)-1,只要知道第n ...
- table表格
表格是一种组织整理的数据的手段,在div布局还未流行是,也用来布局,一个表格包含了表格整体.表格头部.每个表格均有若干行,每行被分为若干单元格. 在HTML中表格使用table标签来定义,行由< ...
- java面向对象编程——第八章 类的高级概念
8.1访问修饰符: public:该类或非该类均可访问: private: 只有该类可以访问: protected:该类及其子类的成员可以访问,同一个包中的类也可以访问: 默认:相同数据包中的类可以访 ...
- UVa 11426 - GCD - Extreme (II)
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...
- linux内核启动笔记
一. 1.解压 tar xjf linux-2.6.22.6.tar.bz2 2.打补丁 patch -p1 < ../linux-2.6.22.6_jz2440.patch 3.配置 ...
- php 获取当前url,可以规避框架url重写后还有index.php的情况
function get_url(){ $pageURL = 'http'; if ($_SERVER["HTTPS"] == "on") { $pageURL ...
- 采用EntLib5.0(Unity+Interception+Caching)实现项目中可用的Caching机制
看了园子里很多介绍Caching的文章,多数都只介绍基本机制,对于Cache更新和依赖部分,更是只简单的实现ICacheItemRefreshAction接口,这在实际项目中是远远不够的.实际项目中, ...
- 类似github的框架
github是程序员经常上的网站,但如果是在一家苦逼不能访问外网的公司,那不能把自己的代码托管在github上绝对是一件非常痛苦的事情.如果想要在公司内网也可以用github托管自己的代码,那就要自己 ...
- iphone获取当前运行进程列表
通过调用 sys/sysctl.h 读取系统内核获取进程列表 . 代码悦德财富:https://yuedecaifu.com 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 ...