Inno Setup安装时判断并关闭已经运行的应用exe

就很简单的一个功能,Inno setup制作的安装包,在安装时候,判断是否之前有本程序的实力在运行,运行的话终止他,貌似很简单,折腾了我1小时。
  网上找的好多方案,不理想不理想!我就给大家列举下这些我认为不理想的原因!
  网上方案1: 在Code段用FindWindowByWindowName、FindWindowByClassName……对不起我的客户端的标题是会变的啊!我的客户端主窗口是对话框啊,窗口类名都一样(#32770)啊!
  网上方案2: 用个叫IsTask.dll的外部扩展,Inno setup没,自己网上下,说白了就是个用c++写的一个dll,自己也能写,回头用Code pascal语言调用……,RunTask、KillTask用的这两个函数……,蛋疼的事情发生了,本来秒开的安装包,要卡个5秒以上在打开……怀疑是IsTask.dll破吧,自己写个,c++中char对应pascal中PAnsiChar,函数导出调用方案方法注意stdcall,弄好,还是通过进程名加载dll……结果……卡……5秒以上……原来是inno setup自己low……升级inno setup到最新5.5.9,一样……
  网上方案3: 找啊找老半天,发现SETUP段里可以家个APPMUTEX,不错,我的exe里为了不能多开也弄了个非匿名的mutex,马上家上一句话,点开安装……我了个去,结果只是提示你有你的exe在运行,自己去关闭吧……啥体验啊……
  自己的方案,很简单通过checkmutex判断是否在运行,是的话通过ShellExec 打开cmd用taskkill杀死进程……完美解决,也不会加载dll卡的5秒,体验棒棒哒。
[Code]
var ErrorCode: Integer;
function InitializeSetup(): Boolean;
begin
if CheckForMutexes('CZY_CLIENT_BY_WX') then
       begin
            if MsgBox('检测到你的超自由客户端正在运行中!'#13'点击 "是" 关闭超自由客户端继续安装;'#13'点击 "否" 退出安装程序!', mbConfirmation, MB_YESNO) = IDYES then
               begin
               ShellExec('open', ExpandConstant('{cmd}'), '/c taskkill /f /t /im CZYClient.exe', '', SW_HIDE, ewNoWait, ErrorCode);
               Result:= true;
               end
            else
               Result:= false;
       end
   else
Result:=true;
end;
 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值