'Uninstall fails because program is running. How do I make Inno Setup check for running process prior to attempting delete?
Inno Setup fails to remove components during uninstall cause my program is still running and the executable cannot be deleted. How do I have it check to see if it is running before allowing uninstall to proceed?
Solution 1:[1]
We used an other way than described above. Because this is an uninstallation we can kill the application and unistall it. The simpliest way, when u can't use AppMutex: (related to Really killing a process in Windows)
[UninstallRun]
Filename: "{cmd}"; Parameters: "/C ""taskkill /im <precessname>.exe /f /t"
Hope somebody will help this. I searched a long time for this.
Solution 2:[2]
Try this solution! I had issues with other solutions closing the app, but Inno Setup still thought the installed files were locked.
Remember to define your constants:
#define MyAppName "AppName"
#define MyAppExeName "AppName.exe"
[Code]
function InitializeUninstall(): Boolean;
var ErrorCode: Integer;
begin
ShellExec('open','taskkill.exe','/f /im {#MyAppExeName}','',SW_HIDE,ewNoWait,ErrorCode);
ShellExec('open','tskill.exe',' {#MyAppName}','',SW_HIDE,ewNoWait,ErrorCode);
result := True;
end;
Major props to the original source of this solution.
Solution 3:[3]
Use the AppMutex directive to prevent the uninstaller from proceeding, when an application is running.
[Setup]
AppMutex=MyProgMutex
The application has to create the mutex specified by the directive. See the linked AppMutex directive documentation for examples.
If you want to have the uninstaller kill the application, when it is still running, use this code instead:
function InitializeUninstall(): Boolean;
var
ErrorCode: Integer;
begin
if CheckForMutexes('MyProgMutex') and
(MsgBox('Application is running, do you want to close it?',
mbConfirmation, MB_OKCANCEL) = IDOK) then
begin
Exec('taskkill.exe', '/f /im MyProg.exe', '', SW_HIDE,
ewWaitUntilTerminated, ErrorCode);
end;
Result := True;
end;
As with the AppMutex directive above, the application has to create the mutex specified in the CheckForMutexes call.
Note that for installer, you do not have to code this. The installer has restart manager built-in.
See Kill process before (re)install using "taskkill /f /im" in Inno Setup.
Solution 4:[4]
perhaps add this property
CloseApplications=yes it will look at all the [Files] and [InstallDelete] elements and work using windows restart manager
https://jrsoftware.org/ishelp/index.php?topic=setup_closeapplications
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Community |
| Solution 2 | sky-dev |
| Solution 3 | |
| Solution 4 | Walter Verhoeven |
