Inno Setup 安装包
安装前执行InitializeSetup()函数
在安装时,需要在运行安装包进行安装前,做一些判定是否继续安装的工作,在Inno 的脚本里写InitializeSetup()函数即可。
function InitializeSetup(): Boolean;
Called during Setup's initialization. Return False to abort Setup, True otherwise.
函数InitializeSetup():布尔值;
在安装程序初始化期间调用。返回False中止安装,返回True表示继续安装。
需求:禁止安装旧的版本。
重载安装程序初始化函数,判断是否已经安装新版本,如果是则禁止安装。
function InitializeSetup() : boolean;
begin
#ifndef PortableBuild
#ifdef OnlyInstallNewVersion
if is_installed_before() then
begin
if is_installing_older_version() then
begin
MsgBox(CustomMessage('init_setup_outdated_version_warning'), mbInformation, MB_OK);
Result := False;
end else
begin
Result := True;
end;
end else
begin
Result := True;
end;
#else
Result := True;
#endif
#else
Result := True;
#endif
end;
但有时候需要执行一些复杂的操作。需要用到执行exe程序。甚至是用管理员权限进程操作,用管理员权限的时候,最好是让安装包获得管理员权限去执行,这样用户体验才会流畅。
Shellexec函数
Inno Setup 的Shellexec函数的功能类似Windows API 的ShellExecute函数,它被用来执行某种操作,可以是开启一个进程,也可以打开一个浏览器等等。
不过,Inno Setup 的Shellexec有一个优点,这个优点体现在第六个参数上。
首先看shellexec:
function ShellExec(
const Verb,
Filename,
Params,
WorkingDir: String;
const ShowCmd: Integer;
const Wait: TExecWait;
var ErrorCode: Integer): Boolean;
第一个参数表示执行的动作,一般开启一个进程使用'open',第二个参数表示进程名(包含路径),第三个参数表示命令行参数,第四个参数是工作路径,第五个参数表示是否显示,第七个参数是一个错误码。
第六个参数表示如下:
TExecWait = (ewNoWait, ewWaitUntilTerminated, ewWaitUntilIdle);
如果使用ewNoWait,那么ShellExec开启进程以后立即返回。
如果使用ewWaitUntilTerminated,则ShellExec开启进程以后阻塞,知道被开启的进程终止以后才返回。
如果使用ewWaitUntilIdle,则ShellExec在CPU空闲的时候返回。
其中ewWaitUntilTerminated很有用,这样可以在一个安装程序中随意的控制执行其他的操作。
安装前卸载
Inno Setup 安装前卸载原程序
很多時候我们需要在安装文件之前卸载原有的程序而不是覆盖安裝,下面的代码就是实现了这个的功能。
实现原理是:从注册表的'UninstallString'项中读取卸载信息,卸载程序,用Exec执行卸载程序,参数选择静默方式执行。
下面code中APP_NAME是程序名。
function InitializeSetup(): boolean;
var
ResultStr: String;
ResultCode: Integer;
begin
if RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\APP_NAME', 'UninstallString', ResultStr) then
begin
ResultStr := RemoveQuotes(ResultStr);
Exec(ResultStr, '/silent', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
end;
result := true;
end;
安装前执行Cmd命令
//重载安装程序初始化函数,判断执行cmd命令
function InitializeSetup() : boolean;
var
ResultStr: String;
ResultCode: Integer;
begin
//Exec('cmd.exe', 'net stop WhatSvc', '', SW_SHOW, ewWaitUntilTerminated, ResultCode);
ShellExec('', 'cmd.exe', 'cmd /c net stop WhatSvc& sc delete WhatSvc', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
result := true;
end;
本文介绍了Inno Setup安装包中的InitializeSetup()函数,用于在安装前执行判定和操作,如禁止安装旧版本、执行Shellexec函数、卸载原程序以及运行Cmd命令。通过示例代码展示了如何实现这些功能,确保安装过程顺利进行。
2007

被折叠的 条评论
为什么被折叠?



