在卸载之前检查应用程序是否在NSIS中运行

Mah*_*meh 7 nsis

我是NSIS的新手,我需要知道在卸载程序中,如何检查应用程序(在C++中)是否正在运行并在卸载之前将其关闭.

fia*_*iat 9

这是一个稍微友好的版本,使用NSProcess请求关闭而不是终止它(Owen的答案)

${nsProcess::FindProcess} "${APP_EXE}" $R0

${If} $R0 == 0
    DetailPrint "${AppName} is running. Closing it down"
    ${nsProcess::CloseProcess} "${APP_EXE}" $R0
    DetailPrint "Waiting for ${AppName} to close"
    Sleep 2000  
${Else}
    DetailPrint "${APP_EXE} was not found to be running"        
${EndIf}    

${nsProcess::Unload}
Run Code Online (Sandbox Code Playgroud)


Owe*_*wen 7

使用NsProcess插件.在这里下载 - > NSProcess
如何使用它?很简单:

${nsProcess::KillProcess} "${APP_EXE}" $R4
Run Code Online (Sandbox Code Playgroud)

其中APP_EXE是您的应用程序的名称...

下载还会告诉你如何使用它... :)


And*_*ers 2

根据应用程序,您有多种选择:

  • 如果您的应用程序有一个具有某种唯一类名的窗口,您可以使用 FindWindow
  • 如果您的应用程序创建了一个命名内核对象(互斥体等),您可以通过使用系统插件调用正确的本机 win32 API 来检查它
  • 使用像FindProcDLL这样的第 3 方插件

  • 另一个选项是:`ExecWait TaskKill /IM program_name /F` (5认同)