正式会员享受无限制浏览网站功能和高速网盘下载,赶快加入本站吧!
您需要 登录 才可以下载或查看,没有账号?立即注册
x
最近用inno setup想做一个exe,可是在安装之前要停止正在运行的相应进程,可是发现它自身的方法不能满足要求,终于在网上找到了相应的资料,在这里总结一下,方便以后使用。
1:如果我只是单纯的想在安装之前判断一个进程是否存在,要引入psvince.dll这个dll,放在inno setup的安装目录下(与其他dll相同目录),代码如下:
- [files]
- ; 安装前判断进程,dll文件放在inno的安装目录中
- Source: compiler:psvince.dll; Flags: dontcopy noencryption
- //安装前判断是否有进程正在运行
- function IsModuleLoaded(modulename: String ): Boolean;
- external 'IsModuleLoaded@files:psvince.dll stdcall setuponly';
- function InitializeSetup(): Boolean;
- var
- value: string;
- IsAppRunning: boolean;
- begin
- //check Diagnosis press
- value := ExpandConstant('{cm:DiagnosisRunning}');
- Result:= true;
- IsAppRunning:= IsModuleLoaded('进程名:如MySQL.exe');
- while IsAppRunning do
- begin
- if MsgBox('**工具正在运行,请先关闭它!', mbConfirmation, MB_OKCANCEL) = IDOK then
- IsAppRunning:= IsModuleLoaded('进程名:如mysql.exe')
- else
- begin
- IsAppRunning:= false;
- Result:= false;
- end;
- end;
- end;
复制代码
2:如果我想在安装前结束掉某个进程,就要引入IsTask.dll了,放在inno setup的安装目录下(与其他dll相同目录),代码如下:
- [Files]
- Source: D:\FDisk\makeexe\fd\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
- ; NOTE: Don't use "Flags: ignoreversion" on any shared system files
- ; 安装前判断进程,dll文件放在inno的安装目录中
- Source: compiler:IsTask.dll; Flags: dontcopy noencryption
- [Code]
- //安装前判断是否有进程正在运行,istask.dll文件与打包的exe文件一起
- function RunTask(FileName: string; bFullpath: Boolean): Boolean;
- external 'RunTask@files:ISTask.dll stdcall delayload';
- function KillTask(ExeFileName: string): Integer;
- external 'KillTask@files:ISTask.dll stdcall delayload';
- function InitializeSetup(): Boolean;
- begin
- Result:= true;
- if RunTask('进程名:如mysql.exe', false) then
- begin
- if MsgBox('安装程序检测到**正在运行!'#13''#13'点击 "是" 按钮将停止进程然后继续安装;'#13''#13'点击"否" 按钮将终止安装程序!', mbConfirmation, MB_YESNO) = IDYES then
- begin
- KillTask('进程名:如mysql.exe');
- KillTask('mysqld.exe');
- Result:= true;
- end
- else
- Result:= false;
- end
- else
- Result:= true;
- end;
复制代码
|