How to end the process using inno setup?

I want to kill the process using inno setup.i to check if the window is open before I start the installation.

Can this be done by searching for a Windows name? please help me with some sample code to kill the process.

+4
source share
4 answers

The best option is to use the mutex to see if everything works with AppMutex . One way to close it is to find the window handle, and then just send the WM_CLOSE message.

There are other options, such as Files used in the extension and PSVince

Also see this article for more information.

+1
source

in the [UninstallRun] section, you can add the following code:

 Filename: {sys}\taskkill.exe; Parameters: "/f /im MyProcess.exe"; Flags: skipifdoesntexist runhidden 
+15
source

This is what I did to encourage the user to close the program if it was running.

 function CheckProcessRunning( aProcName, aProcDesc: string ): boolean; var ShellResult: boolean; ResultCode: integer; cmd: string; sl: TStringList; f: string; d: string; begin cmd := 'for /f "delims=," %%i ' + 'in (''tasklist /FI "IMAGENAME eq ' + aProcName + '" /FO CSV'') ' + 'do if "%%~i"=="' + aProcName + '" exit 1'; f := 'CheckProc.cmd'; d := AddBackSlash( ExpandConstant( '{tmp}' )); sl := TStringList.Create; sl.Add( cmd ); sl.Add( 'exit /0' ); sl.SaveToFile( d + f ); sl.Free; Result := true; while ( Result ) do begin ResultCode := 1; ShellResult := Exec( f, '', d, SW_HIDE, ewWaitUntilTerminated, ResultCode ); Result := ResultCode > 0; if Result and ( MsgBox( aProcDesc + ' is running. This program must be closed to continue.'#13#10 + 'Please close it and click Yes to retry or click No to cancel this installer.', mbConfirmation, MB_YESNO ) <> IDYES ) then Break; end; DeleteFile( d + f ); end; 

I used it in the following sections of the special code as follows:

 // Perform some initializations. Return False to abort setup function InitializeSetup: Boolean; begin // Do not use any user defined vars in here such as {app} InitializeGlobals; Result := not ( CheckProcessRunning( 'bcb.exe', 'C++ Builder' ) or CheckProcessRunning( 'delphi32.exe', 'Delphi' ) or CheckProcessRunning( 'bds.exe', 'Rad Studio' )); end; function InitializeUninstall: Boolean; begin InitializeGlobals; Result := not ( CheckProcessRunning( 'bcb.exe', 'C++ Builder' ) or CheckProcessRunning( 'delphi32.exe', 'Delphi' ) or CheckProcessRunning( 'bds.exe', 'Rad Studio' )); end; 
+5
source

A less complicated method is to run a batch file that uses the kill task

i.e.: if you want to kill the notepad before deleting

 taskkill /IM notepad.exe 
+1
source

All Articles