inno setup 安装前判断进程是否存在,以及停止相应进程<转>

打包的时候遇到了这样的需求:假似用户都是傻瓜                  式操作,如果更新安装程序的时候,之前的老程序还在运行这个时候如果你去提示让用户吧老程序手动退掉也不现实。

所以当遇到这种情况的时候能不能在更新安装程序上下手,在更新的时候就默认吧老程序杀掉(如果老程序在运行)。

答案是明确的inno setup 是可以这样的操作。

下面是转的文章,谢谢作者的分享。

==============================================================

最近用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 ‘[email protected]: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 ‘[email protected]:ISTask.dll stdcall delayload‘;
function KillTask(ExeFileName: string): Integer;
external ‘[email protected]: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;

原文地址:https://blog.csdn.net/u011592169/article/details/11073065

原文地址:https://www.cnblogs.com/wainiwann/p/9040114.html

时间: 2024-11-05 11:27:56

inno setup 安装前判断进程是否存在,以及停止相应进程<转>的相关文章

Inno Setup 安装前卸载原程序

Inno Setup 安装前卸载原程序 分类: Install Setup 2013-02-02 15:53 2315人阅读 评论(0) 收藏 举报 很多時候我們需要在安裝文件之前卸載原有的程序而不是覆蓋安裝,本文的code就是實現了這樣的功能. 實現原理是:從注冊表'UninstallString'項中讀取卸載信息,用Exec進行靜默卸載. 下面code中APP_NAME為你的程序名,可以去注冊表中確認. 1 function InitializeSetup(): boolean; 2 var

Inno Setup 安装、卸载前检测进程或服务

[转载]Inno Setup 安装.卸载前检测进程或服务 (2015-04-24 17:37:20) 转载▼ 标签: 转载   原文地址:Inno Setup 安装.卸载前检测进程或服务作者:一去丶二三里 在用Inno打包期间遇到了一些小问题,在这里总结一下: Inno.iss部分内容如下: 1.32位程序的PSVince.dll插件方法. [Files] Source: psvince.dll; Flags: dontcopy [Code] function IsModuleLoaded(mo

一个比较完整的Inno Setup 安装脚本

一个比较完整的Inno Setup 安装脚本,增加了对ini文件设置的功能,一个安装包常用的功能都具备了. 1 [Setup] 2 ; 注: AppId的值为单独标识该应用程序. 3 ; 不要为其他安装程序使用相同的AppId值. 4 ; (生成新的GUID,点击 工具|在IDE中生成GUID.) 5 AppId={{A9861883-31C5-4324-BD9A-DC3271EEB675} 6 ;程序名 7 AppName=ISsample 8 ;版本号 9 AppVerName=ISsamp

一个比较完整的Inno Setup 安装脚本(转)

一个比较完整的Inno Setup 安装脚本,增加了对ini文件设置的功能,一个安装包常用的功能都具备了.   [Setup] ; 注: AppId的值为单独标识该应用程序. ; 不要为其他安装程序使用相同的AppId值. ; (生成新的GUID,点击 工具|在IDE中生成GUID.) AppId={{A9861883-31C5-4324-BD9A-DC3271EEB675} ;程序名 AppName=ISsample ;版本号 AppVerName=ISsample 1.0.0.0 ;发布者名

Inno Setup安装、卸载时判断是否程序正在运行

var ErrorCode: Integer; IsRunning: Integer; // 安装时判断客户端是否正在运行 function InitializeSetup(): Boolean; begin Result :=true; //安装程序继续 IsRunning:=FindWindowByWindowName('E家人客户端'); while IsRunning<>0 do begin if Msgbox('安装程序检测到客户端正在运行.' #13#13 '您必须先关闭它然后单击

Inno Setup安装程序单例运行

1.缘起: KV项目下载底层升级包,老是报出升级文件占用问题,反复分析,不得其所. 今天突然发现同时启动多个升级程序实例,分析认为安装包同时被调用多次,导致实例访问文件冲突,导致此问题. 安装程序由Inno Setup制作,遂找其解决方案,最先想到的是互斥体,就由此开始! 2.AppMutex [Setup] AppMutex=MyAppMutex 安装程序Setup段,此互斥变量,会在安装程序启动时检测是否有此互斥体的程序在运行,若有则提示: 通常,在程序中置同名互斥体,此入判断,可避免程序在

Inno setup卸载前退出进程、删除文件夹

[Code]function InitializeUninstall(): Boolean; var MainRun: HWND; var MVRun:HWND; begin// FindWindowByWindowName函数参数为窗口名,即窗口标题,而非进程名. MainRun := FindWindowByWindowName('主窗口'); MVRun := FindWindowByWindowName('Connector'); if (ScreenRun<>0) or (MVRun

安装器---Inno Setup

Inno Setup[1]  用Delphi写成,其官方网站同时也提供源程序免费下载.它虽不能与Installshield这类恐龙级的安装制作软件相比,但也当之无愧算是后起之秀.Inno Setup是一个免费的安装制作软件,小巧.简便.精美是其最大特点,支持pascal脚本,能快速制作出标准Windows2000风格的安装界面,足以完成一般安装任务. 用innoSetup做应用程序安装包的示例脚本(.iss文件),具体要看innoSetup附带的文档,好象是pascal语言写的脚本. 示例1(应

Inno Setup入门(七)&mdash;&mdash;提供安装语言选项

Inno Setup安装目录下有一个Languages的文件夹,该文件夹提供了可供使用的语言,通过在脚本中加入[languages]段,可以实现该项功能,实现代码如下: [setup] ;全局设置,本段必须 AppName=Test AppVerName=TEST DefaultDirName="E:\TEST" AppVersion=1.0 Compression=lzma2/max ShowLanguageDialog=yes [languages] Name: "en&