就很简单的一个功能,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在运行,自己去关闭吧……啥体验啊……