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资源, ...
随机推荐
- RHEL6配置IP
修改配置文件:/etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0BOOTPROTO=noneBROADCAST=192.168.10.255HW ...
- NS CKD
NS 定义:ALB<30:高脂血症:大量蛋白尿>3.5g:浮肿 见于:肾小球肾炎.小血管炎.微血管血栓性疾病.NSAIDs引起的急性间质性肾炎.不见于肾大血管病.间质性.小管性疾病. 并发 ...
- java/php/c#版rsa签名以及java验签实现--转
在开放平台领域,需要给isv提供sdk,签名是Sdk中需要提供的功能之一.由于isv使用的开发语言不是单一的,因此sdk需要提供多种语言的版本.譬如java.php.c#.另外,在电子商务尤其是支付领 ...
- how to get file from classpath using jboss7.x.1 --reference
question: I want to convert smooks xml-java, so that i need to load source file from mobeeadmin.war/ ...
- android开发之——混淆编译
众所周知,android的apk文件是非常容易被反编译的,这样对于开发者来说,辛辛苦苦开发应用被破解是一件很令人懊恼的事情,谷歌也认识到了这一点,所以从2.3之后就为开发者提供了一个代码混淆工具pro ...
- Java基础知识强化81:Math类random()方法之获取任意范围的随机数案例(面试题)
1. 需求:设计一个方法,可以实现获取任意范围内的随机数 分析:使用方法random()如下: public static double random() 注:Returns a pseudo-ran ...
- codevs 2449 骑士精神 (IDDfs)
/* 限制步数 写迭代加深 注意剪枝:当先步数+不同的个数-1>当前限制的步数 就cut */ #include<cstdio> #include<cstring> #i ...
- js和php判断当前是否为微信浏览器?
- HTTP状态码(HTTP Status codes)简介
HTTP可能大家都熟悉,就是超文本传输协议.浏览器通过HTTP与WEB Server通讯(也有一些其它软件比如IM使用HTTP协议传递数据),把我们的请求(HTTP Request)传递给服务器,服务 ...
- [php基础]PHP.INI配置:文件上传功能配置教程
昨天分享了在PHP网站开发中如何在php.ini中配置实现session功能的PHP教程,今天继续分享在利用PHP实现文件上传功能时几点关键php.ini的配置. 说到在php.ini中的文件上传的配 ...