我是NSIS的新手,我需要知道在卸载程序中,如何检查应用程序(使用C ++)是否正在运行并在卸载之前将其关闭。
答案 0 :(得分:8)
这是一个稍微友好的版本,使用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}
答案 1 :(得分:7)
使用NsProcess插件。在这里下载 - > NSProcess
如何使用它?简单如下:
${nsProcess::KillProcess} "${APP_EXE}" $R4
其中APP_EXE是您的应用程序的名称......
下载也会告诉你如何使用它......:)
答案 2 :(得分:1)
根据应用程序的不同,您有几个选择:
答案 3 :(得分:1)
只需确保安装或卸载的第一件事就是删除%TEMP(或任何其他应用程序可写目录)中的所有xyz.tmp文件,然后再运行以下for循环。无需插件。
!macro IsRunning
ExecWait "cmd /c for /f $\"tokens=1,2$\" %i in ('tasklist') do (if /i %i EQU xyz.exe fsutil file createnew $TEMP\xyz.tmp 0)"
IfFileExists $TEMP\xyz.tmp 0 notRunning
;we have atleast one main window active
MessageBox MB_OK|MB_ICONEXCLAMATION "XYZ is running. Please close all instances and retry." /SD IDOK
Abort
notRunning:
!macroEnd