Inno Setup打包的软件安装、卸载前检测进程运行情况并关闭相应进程

您所在的位置:网站首页 添加删除程序进程 Inno Setup打包的软件安装、卸载前检测进程运行情况并关闭相应进程

Inno Setup打包的软件安装、卸载前检测进程运行情况并关闭相应进程

2024-07-15 06:56:21| 来源: 网络整理| 查看: 265

需求:

使用Inno Setup打包软件,要求安装和卸载时检查程序是否正在运行,如正在运行则关闭相应进程,不然会安装失败或者卸载不完全。

思路: 在Inno打包脚本中,编写[Code]模块,调用cmd,执行windows命令终止进程(我选用的方法); 参考:Inno Setup安装卸载时检查程序是否运行提示并中止程序使用psvince.dll、ISTask.dll实现(未测试); 参考:Inno Setup 系列之安装、卸载前检测进程运行情况并关闭相应进程尝试在安装和启动时调用bat文件,编写bat脚本文件实现检测并终止进程,也是一种看起来可行的思路(未测试); 参考:Inno Setup 系列之安装、卸载时调用bat 转载:Inno Setup安装卸载时检查程序是否运行提示并中止程序

Inno Setup打包的软件需要在安装和卸载时检查程序是否在运行,不然会安装失败或者卸载不完全,网上搜了一下,有几种方法:

自己封装DLL,或者下载别人写好的DLL,比如psvince.dll和ISTask.dll,判断程序是否运行然后中止(有人说调用很慢很卡,没验证,因为自己没下载这两个DLL,自己写觉得麻烦)通过FindWindowByWindowName之类的函数查找窗口,然后发送消息,通知程序退出(窗口名不固定就很麻烦,还有查找不到的)通过调用命令行,执行windwow命令,达到检查和中止的功能(调用cmd命令会被一些杀毒软件阻止,需要手动允许)通过在程序中添加命名mutex,然后在iss脚本中通过CheckForMutexes等函数判断程序是否运行

我使用的是第3种方法 在iss脚本的[Code]段添加如下代码,自己替换 “你的软件名.exe” 成你要检查的exe名称

[Code] // 自定义函数,判断软件是否运行,参数为需要判断的软件的exe名称 function KDetectSoft(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]); //ShellExec('open', ExpandConstant('{cmd}'), '/c taskkill /f /t /im 你的软件名.exe', '', SW_HIDE, ewNoWait, ErrorCode); //bRes := ShellExec('open', ExpandConstant('{cmd}'), '/c tasklist /nh|find /c /i "你的软件名.exe" > 0.txt', '', SW_HIDE, ewWaitUntilTerminated, ErrorCode); 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 //MsgBox('软件没在运行', mbInformation, MB_OK); Result:= true; Exit; end; end; end; Result :=true; end; // 开始页下一步时判断软件是否运行 function NextButtonClick(CurPageID: Integer): Boolean; begin if 1=CurPageID then begin Result := KDetectSoft('你的软件名.exe'); Exit; end; Result:= true; end; // 卸载时关闭软件 function InitializeUninstall(): Boolean; begin Result := KDetectSoft('你的软件名.exe'); end;

脚本是支持中英文安装包,所以还要添加[CustomMessages]段

// 自定义不同语言文本 [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}’)直接改成你要显示的提示



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭