INNO setup 制作安装包
1、获取SQLserver安装路径
var
dbpath:string;
rtn:boolean;
rtn := RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWAREMicrosoftMSSQLServerSetup','SQLPath', dbpath);
if (!rtn) then dbpath := ExpandConstant('{app}');
2、获取本机的IP地址
ip:string;
rtn:boolean;
rtn :=RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SYSTEMCurrentControlSetServices{083565F8-18F0-4F92-8797-9AD701FCF1BF}ParametersTcpIp','IpAddress', ip);
if (not rtn) or (ip='0.0.0.0') or (ip='') then ip := '127.0.0.1';
3.修改安装包左侧位图,其大小一般为164x314px,在INNO脚本的[Setup]段添加如下代码:
注:红色的标记为位图路径,可以用相对路径或绝对路径
4.修改安装包右上角位图,其大小一般为55x55px,在INNO脚本的[Setup]段添加如下代码:
WizardSmallImageFile=ResWizardSmallImage.bmp
5.修改安装包左下角的BeveledLabel内容,常见有两种方式:
(1)临时性修改 在INNO脚本的[Messages]段添加如下代码:
(2)永久性修改 用记事本打开INNO目录中的“Default.isl” 修改“BeveledLabel = ”后的内容:
6.修改安装包欢迎标签内容,即WelcomeLabel2
用记事本打开INNO目录中的“Default.isl” 修改“WelcomeLabel2 = ”后的内容:
注:%n在INNO脚本中为换行符
7.安装结束后动行主程序或打开文件等,只需在INNO脚本的[Run]段修改代码:
Filename: {app}汉化说明.txt; Description: 查看说明; Flags: nowait postinstall shellexec
8、自定义BeveledLabel文字
[Messages]
BeveledLabel=中天VIP工作室
9、自定义安装程序界面左上角“安装”文字
[message]
SetupAppTitle=需要的字
SetupWindowTitle=需要的字
10、自定义安装程序版本号
VersionInfoVersion=1.1
VersionInfoTextVersion=1.1
参考代码
1、系统进程监测
[Code]
var
is_value: integer;
function InitializeSetup(): Boolean;
begin
Result :=true;
is_value:=FindWindowByClassName(‘TfrmCmdCenter’);
while is_value<>0 do
begin
if Msgbox(‘安装程序检测到您的迅雷软件当前正在运行。’ #13#13 ‘您必须先关闭它然后单击“是”继续安装,或按“否”退出!’, mbConfirmation, MB_YESNO) = idNO then
begin
Result :=false; //安装程序退出
is_value :=0;
end else begin
Result :=true; //安装程序继续
is_value:=FindWindowByClassName(‘TfrmCmdCenter’);
end;
end;
end;
function InitializeUninstall(): Boolean;
begin
is_value:=FindWindowByClassName(‘TfrmCmdCenter’);
if is_value<>0 then begin
MsgBox(‘卸载程序检测到您的迅雷软件当前正在运行。’ #13#13 ‘为了更安全完整的卸载,您必须关闭它在进行卸载操作!’, mbError, MB_OK);
Result :=false;
end else Result :=true;
end;
2.自定义安装程序右上角图片大小
[code]
procedure InitializeWizard();
begin
WizardForm.WizardSmallBitmapImage.width:=150; //设置页眉图片的大小
WizardForm.WizardSmallBitmapImage.left:=WizardForm.width-150; //设置左边页眉留出的空隙
WizardForm.PAGENAMELABEL.width:=0; //设置标题文字显示的大小
WizardForm.PAGEDESCRIPTIONLABEL.width:=0; //设置标题文字显示的大小
end;
3.跳关安装程序的欢迎界面
INNO 的设计中本身可以跳过所有向导页面(用 ShouldSkipPage 函数),但是唯独不能跳过欢迎页面,据说作者是有意为了防止该功能被滥用,即产生完全没有界面的在后台运行的安装程序。
要跳过欢迎页面,只能调用系统的功能。
参考一
复制内容到剪贴板代码:
[Code]
const
WM_LBUTTONDOWN = 513;
WM_LBUTTONUP = 514;
procedure InitializeWizard();
begin
PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONDOWN,0,0);
PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONUP,0,0);
// 其它代码
end;
参考二
复制内容到剪贴板代码:
[Code]
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpWelcome then
WizardForm.NextButton.OnClick(WizardForm);
end;
两者都能跳过欢迎页面
4.跳过准备安装界面
使用inno打包,我们会注意到,在选择好安装向导所指定的所有项目后,安装向导会进入一个准备安装的界面提示你所有的安装信息。此时,我们只能点击安装按钮,安装才可以继续。有时候,为了某种需要,我们可能不想让程序显示这个准备安装的界面,那么如何去掉这个界面呢?请看以下的代码:
[code]
function ShouldSkipPage(PageID: Integer): Boolean;
begin
if PageID=wpReady then
result := true;
end;
5.判断注册表检查程序时候存在
有时候,我们制作软件的汉化或者补丁程序,需要判断软件是否已安装,如果软件已安装就安装此补丁,如果软件未安装就终止安装程序并且提示用户安装原版软件后再运行此补丁,那么如何实现此功能呢,这里就给大家提供一个我的判断实力。通过检查注册表相关键值来判断指定程序是否已安装,以下是我制作的一个程序的增强补丁,需要在源程序安装的基础上进行安装,具体脚本判断如下:
[CODE]
var
MyKeyExist: boolean;
function InitializeSetup(): boolean;
begin
MyKeyExist:= true;
if Not RegValueExists(HKEY_LOCAL_MACHINE, 'SOFTWAREAdobeAudition3.0', 'ApplicationPath') then
begin
MyKeyExist:= false;
MsgBox('安装程序检测到您的系统内没有安装Adobe Audition3.0,请先安装软件在运行此补丁。', mbInformation, MB_OK);
end;
Result:= MyKeyExist;
end;
6.如何让协议许可页面默认选中我同意按钮
为了让初学者更方便的安装软件,有时候我们会发现一些使用inno setup打包的程序在许可页面默认已经选中了我同意按钮,只需要点击下一步即可继续安装,那么这个效果是如何实现的呢?下面是代码:
[code]
procedure InitializeWizard();
begin
WizardForm.LICENSEACCEPTEDRADIO.Checked := true;
end;
7.安装前检测是否已经安装
function InitializeSetup(): boolean;
begin
Result := true;
if FileExists(ExpandConstant('{pf}我的程序我的程序.exe')) then
begin
MsgBox('程序已经安装在你的系统中了,请先卸载!', mbInformation, MB_OK );
Result := false;
end;
end;
其中{pf}我的程序我的程序.exe替换为你自己的路径即可
加入此代码的含义,就是检测目录下是否包括代码中指定的文件名的文件,如果有则当您运行程序后直接弹出提示告诉您软件已经存在,请先卸载。因此,这个代码有个局限性,就是只能检测固定的目录的文件,如果用户的文件并未安装到脚本所指定的检测目录,那么就将无法检测到。所以,判断也就失效了。
8、安装完成后显示新特性
[Run]
Filename: "{app}WhatsNew.Txt"; Description: "安装完成后显示新特性"; Flags: postinstall shellexec skipifsilent
[Run]
Filename: {app}vcredist_x86.exe; Parameters: /q; WorkingDir: {tmp}; Flags: skipifdoesntexist; StatusMsg: "Installing Microsoft Visual C++ Runtime ..."; Check: NeedInstallVC9SP1
[Code]
var
vc9SP1Missing: Boolean;
function NeedInstallVC9SP1(): Boolean;
begin
Result := vc9SP1Missing;
end;
function InitializeSetup(): Boolean;
var
version: Cardinal;
begin
if RegQueryDWordValue(HKLM, 'SOFTWAREMicrosoftWindowsCurrentVersionUninstall{9A25302D-30C0-39D9-BD6F-21E6EC160475}', 'Version', version) = false
then
begin
vc9SP1Missing := true;
end;
result := true;
end;
INNO setup 制作安装包的更多相关文章
- 解决Inno Setup制作安装包无法创建桌面快捷方式的问题
转自:http://yedward.net/?id=104 昨天想把个java程序做成exe安装软件,然后就去下载了Inno Setup这个软件安装包制作软件,Inno Setup这个软件确实非常好用 ...
- 20 Inno Setup制作安装包的几个问题
系统开发好之后,通常需要制作成安装包,才能卖给用户.利用Inno Setup的向导可以制作简单的安装包,但是如果要做个好的安装包的话可能会遇到一些麻烦,今日终于抽空解决了,Inno Setup打包的一 ...
- Inno Setup制作安装包的几个问题
1. 卸载时,如何判断应用程序是否运行 InnoSetup 提供变量AppMutex,用来保存应用程序的Mutex名称.现在很多应用程序都是唯一实例运行.这样避免配置文件被错误修改以及其他很多衍 ...
- 使用inno setup制作安装包
- 用inno Setup制作web项目安装包
http://www.cnblogs.com/xionghui/archive/2012/03/22/2411207.html 用inno Setup制作安装包 新建一个文件夹exambody,放ap ...
- [Azure DevOps] 使用 Inno Setup 制作桌面软件安装包
1. 桌面应用程序的 CI/CD 桌面应用程序的 CI/CD 过程和网站有一些不同,毕竟桌面应用程序的"部署"只是将安装包分发到目标位置,连应用商店都不用上,根据公司的管理流程可以 ...
- Inno Setup制作应用程序安装包
我最近写了一个MFC应用程序,想发给其他的小伙伴玩一玩,直接发了个exe文件过去,结果发现小伙伴那边打不开.原来这个exe文件虽然是MFC静态编译的,但是还依赖了其他几个.dll文件,需要把这几个dl ...
- 用Inno Setup制作WEB程序安装包
原文 用Inno Setup制作WEB程序安装包 最近做了一个WEB程序的安装包,我把制作的过程做个介绍,贴出源码给大家做个参考 看看inno 的脚本 [Setup] AppCopyright=tes ...
- 用Inno setup制作以管理员权限启动的安装包
inno setup制作的安装包,默认是不需要管理员权限启动的.我们制作安装包,往往需要做一些设置工作,这些设置工作可能用到管理员权限.使用Resource Hacker修改inno setup资源, ...
随机推荐
- Oracle执行计划——使用index full scan的几种情况
常见有三种情况都有用到indexfull scan. 1. 查询列就是索引列 2. 对索引列进行order by时 3. 对索列进行聚合计算时
- Linux与JVM的内存关系分析
引言 在一些物理内存为8g的server上,主要执行一个Java服务,系统内存分配例如以下:Java服务的JVM堆大小设置为6g,一个监控进程占用大约600m,Linux自身使用大约800m. 从表面 ...
- 在JAVA中 System.getProperty 和 System.setProperty 方法.
今天着手研究TOMCAT源码. 在刚開始的时候Startup类中init方法中调用非常多次System.getProperty和System.setProperty的方法. 后来经过网上搜索才得知,这 ...
- 详述iOS国际化
在真正将国际化实践前,只知道通过NSLocalizedString方法将相应语言的字符串加载进来即可.但最近公司项目的新需求增加英文版本,并支持应用内无死角切换~,这才跳过各种坑实现了应用内切换语言, ...
- Shell脚本:判断用户和用户组是否已经存在/创建用户和用户组
通常作为一个应用程序的部署脚本,开始的第一项工作是为当前应用创建一个专用(dedicated)的用户和用户组.这个脚本很简单,这里贴一个参考样本: #!/bin/sh user=test_user ...
- [转] Java内部类之闭包(closure)与回调(callback)
闭包(closure)是一个可调用的对象,它记录了一些信息,这些信息来自于创建它的作用域.通过这个定义,可以看出内部类是面向对象的闭包,因为它 不仅包含外围类对象(创建内部类的作用域)的信息,还自动拥 ...
- 头像上传ASP.NET MVC实现-可拖动大小实时预览
这是一个ASP.NET MVC实现的类似于dz论坛的上传头像功能.可以拖动选择大小,支持多种尺寸生成. 效果界面 头像上传源码下载 项目中具体应用时,请根据需求做调整.欢迎交流~回复即可下载~源码下载 ...
- VideoView 视频播放 示例
介绍 实现的功能: 可播放本地视频或网络视频,可控制播放或暂停 最小化时保存播放位置及播放状态,resume时恢复所有状态: 横竖屏切换时保持切换前的位置及状态 在屏幕上竖直滑动可调节屏幕亮度和音量 ...
- RTSP协议资料
维基百科: RTSP:http://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol RTP:http://en.wikipedia.org/wik ...
- JDK环境变量配置及Tomcat安装服务
1.测试jdk安装是否成功: 在cmd中输入java -version 2.环境变量: 1)新建系统变量JAVA_HOME,如:D:\Program Files\Java\jdk1.8.0_60 2) ...