Inno Setup打包的程序在运行的时候会监测程序是否正在运行,会提示终止运行的程序,但是不知什么原因,自带的终止功能有时不能正常终止,所以这里直接添加了检测代码来自行终止。
代码如下:
#define MyAppExeName "我的程序.exe"
[Languages]
Name: "chinesesimp"; MessagesFile: "compiler:Default.isl"
[Code]
// 自定义函数,判断软件是否运行,参数为需要判断的软件的exe名称
function CheckSoftRun(strExeName: String): Boolean;
// 变量定义
var ErrorCode: Integer;
var bRes: Boolean;
var strFileContent: AnsiString;
var strTmpPath: String; // 临时目录
var strTmpFile: String; // 临时文件,保存查找软件数据结果
var strCmdFind: String; // 查找软件命令
var strCmdKill: String; // 终止软件命令
begin
strTmpPath := GetTempDir();
strTmpFile := Format('%sfindSoftRes.txt', [strTmpPath]);
strCmdFind := Format('/c tasklist /nh|find /c /i "%s" > "%s"', [strExeName, strTmpFile]);
strCmdKill := Format('/c taskkill /f /t /im %s', [strExeName]);
bRes := ShellExec('open', ExpandConstant('{cmd}'), strCmdFind, '', SW_HIDE, ewWaitUntilTerminated, ErrorCode);
if bRes then begin
bRes := LoadStringFromFile(strTmpFile, strFileContent);
strFileContent := Trim(strFileContent);
if bRes then begin
if StrToInt(strFileContent) > 0 then begin
if MsgBox(ExpandConstant('{cm:checkSoftTip}'), mbConfirmation, MB_OKCANCEL) = IDOK then begin
// 终止程序
ShellExec('open', ExpandConstant('{cmd}'), strCmdKill, '', SW_HIDE, ewNoWait, ErrorCode);
Result:= true;// 继续安装
end else begin
Result:= false;// 安装程序退出
Exit;
end;
end else begin
// 软件没在运行
Result:= true;
Exit;
end;
end;
end;
Result :=true;
end;
// 开始页下一步时判断软件是否运行
function NextButtonClick(CurPageID: Integer): Boolean;
begin
if 1=CurPageID then begin
Result := CheckSoftRun('{#MyAppExeName}');
Exit;
end;
Result:= true;
end;
// 卸载时关闭软件
function InitializeUninstall(): Boolean;
begin
Result := CheckSoftRun('{#MyAppExeName}');
end;
[CustomMessages]
chinesesimp.checkSoftTip=安装程序检测到将安装的软件正在运行!%n%n点击"确定"终止软件后继续操作,否则点击"取消"。
这里我全局定义了程序的exe名称
#define MyAppExeName "我的程序.exe"
这这里打包程序只支持中文,如果多语言的话,可以按下面设置:
// 自定义不同语言文本
[CustomMessages]
english.checkSoftTip=Setup detects that the software to be installed is running!%n%nClick "ok" to continue the operation after terminating the software, otherwise click "cancel" .
chinesesimp.checkSoftTip=安装程序检测到将安装的软件正在运行!%n%n点击"确定"终止软件后继续操作,否则点击"取消"。
如果不用支持中英文,可以把上面函数里的ExpandConstant('{cm:checkSoftTip}')
直接改成你要显示的提示