How to check with Inno Setup, if a process is running at a Windows 2008 R2 64bit?

前端 未结 5 980
说谎
说谎 2020-12-09 05:08

I\'ve read the following post. My Code looks exactly the same, but does not work:
Inno Setup Checking for running process

I copied the example from http://www.vi

5条回答
  •  悲哀的现实
    2020-12-09 05:40

    There's an even simpler solution to this; using the code suggested by RRUZ depends on you knowing the install path, which if you run when the installer initialises, you don't know this.

    The best solution is to use FindWindowByClassName. It does have a slight prerequisite that you have a main form that's always open, but you can always run multiple checks if you have a variety of forms that could be open. It also goes without saying that you need to make the classname as unique as possible!

    Example function:

    function IsAppRunning(): Boolean;
    begin                                                                
      Result := (FindWindowByClassName( '{#AppWndClassName}') <> 0) or (FindWindowByClassName( '{#AltAppWndClassName}') <> 0);
    end;
    

    The # precompile references are defined earlier up the install script...

    #define AppWndClassName "TMySplashScreen"
    #define AltAppWndClassName "TMyMainForm"
    

    Then in the code section, you call it as follows:

    function InitializeUninstall(): Boolean;
    begin
      // check if application is running
      if IsAppRunning() then
      begin
        MsgBox( 'An Instance of MyFantasticApp is already running. - Please close it and run the uninstall again.', mbError, MB_OK );
        Result := false;
      end
      else 
        Result := true;
    End;
    

    If you need anything more complex than this then you need to look into mutexes, but the beauty with the above code is that its simple, quick and as long as you have reasonably unique classnames, as good as anything else.

    (Although admittedly if you're running on a multi-user system, then this probably won't find the window if its in another user's session. But as I said, for the majority of simple situations, this would be fine.)

提交回复
热议问题