Inno Setup无法在卸载过程中删除组件,原因是我的程序仍在运行并且无法删除可执行文件。在允许卸载继续之前,我如何检查它是否正在运行?

最佳答案

检查这些

Inno Setup: Detect instances running in any user session with AppMutex

Inno Setup: Is application running?

Inno Setup: Detect if an application is running

有几种方法。如果您的程序定义了互斥锁

[Setup]
AppMutex=MyMutexName

Code部分中的指定互斥锁
function CheckForMutexes (Mutexes: String): Boolean;

您也可以使用
function FindWindowByClassName (const ClassName: String): Longint;

通过类名获取窗口句柄并发送消息。

或以名称命名
function FindWindowByWindowName (const WindowName: String): Longint;

或者您针对此特定用例使用几个DLL文件之一
  • PSVince
  • FindProcDLL

  • 或者阅读后自己做

    How To Terminate an Application "Cleanly" in Win32

    How To Enumerate Applications Using Win32 APIs(此链接到德语版本,因为某些原因我找不到英语版本的KB175030

    或尝试Google翻译的KB175030-DE版本

    KB175030 DE -> EN

    10-07 19:09
    查看更多