在nsis FUnction un.oninit 中使用nsprocess::FIndProcess遍历 查询多个程序TM3C.exe和TM3CCAM.exe是否正在运行,若其中程序有一个或多个正在运行则MessageBox输出程序正在运行是否强行关闭并继续卸载,确认后使用nsProcess::KillProcess关闭正在运行的一个或多个程序
时间: 2023-11-22 22:53:10 浏览: 65
好的,你需要先在nsis脚本中引入nsProcess插件,然后在un.onInit函数中使用nsProcess::FindProcess函数查询是否有正在运行的程序,代码如下:
```
!include "nsProcess.nsh"
Function un.onInit
;查询是否有TM3C.exe和TM3CCAM.exe正在运行
nsProcess::FindProcess "TM3C.exe TM3CCAM.exe" $R0
${If} $R0 != 0
MessageBox MB_OKCANCEL "程序正在运行,是否强行关闭并继续卸载?"
${If} $R0 == IDOK
;关闭正在运行的程序
nsProcess::KillProcess "TM3C.exe TM3CCAM.exe"
${Else}
;取消卸载
Abort
${EndIf}
${EndIf}
FunctionEnd
```
这段代码首先使用nsProcess::FindProcess函数查询是否有TM3C.exe和TM3CCAM.exe正在运行,若有则将返回值存入变量$R0中。然后判断$R0是否为0,若不为0则说明有程序正在运行,此时弹出MessageBox询问用户是否强行关闭并继续卸载。如果用户点击了“确定”按钮,则使用nsProcess::KillProcess函数关闭正在运行的程序;如果用户点击了“取消”按钮,则取消卸载。
相关问题
在nsis FUnction un.oninit 中使用nsprocess::FIndProcess 查询两个程序TM3C.exe,TM3CCAM.exe是否正在运行,若在运行Message Box输出程序正在运行是否强行关闭并继续卸载,同意后使用nsProcess::KillProcess关闭程序
可以使用以下代码实现:
```
Function un.onInit
; 查询 TM3C.exe 是否正在运行
nsProcess::FindProcess "TM3C.exe" $R0
${If} $R0 == "ERROR" ; 查询失败
DetailPrint "Failed to find process TM3C.exe"
${ElseIf} $R0 != "" ; 查询成功且 TM3C.exe 正在运行
MessageBox MB_YESNO|MB_ICONEXCLAMATION "TM3C.exe is currently running. Do you want to force close it and continue uninstallation?" IDYES kill_tm3c IDNO skip_tm3c
${EndIf}
; 查询 TM3CCAM.exe 是否正在运行
nsProcess::FindProcess "TM3CCAM.exe" $R1
${If} $R1 == "ERROR" ; 查询失败
DetailPrint "Failed to find process TM3CCAM.exe"
${ElseIf} $R1 != "" ; 查询成功且 TM3CCAM.exe 正在运行
MessageBox MB_YESNO|MB_ICONEXCLAMATION "TM3CCAM.exe is currently running. Do you want to force close it and continue uninstallation?" IDYES kill_tm3ccam IDNO skip_tm3ccam
${EndIf}
Goto done
; 强制关闭 TM3C.exe 并继续卸载
kill_tm3c:
nsProcess::KillProcess $R0
Goto skip_tm3c
; 跳过关闭 TM3C.exe 并继续卸载
skip_tm3c:
; 强制关闭 TM3CCAM.exe 并继续卸载
kill_tm3ccam:
nsProcess::KillProcess $R1
Goto skip_tm3ccam
; 跳过关闭 TM3CCAM.exe 并继续卸载
skip_tm3ccam:
done:
FunctionEnd
```
以上代码使用了 `nsProcess::FindProcess` 查询进程是否正在运行,如果查询到进程正在运行,则弹出消息框询问用户是否强制关闭程序并继续卸载,用户点击“是”按钮则使用 `nsProcess::KillProcess` 强制关闭程序,并继续卸载。
nsis 卸载过程在FUnction un.oninit 中使用nsprocess::FIndProcess 判断多个程序是否正在运行,若其中一个或多个正在运行,则弹出窗口“程序正在运行,是否强制关闭并继续卸载,点击确定后,强制关程序并继续卸载
好的,那我来给你提供一个可能的解决方案。
你可以在 `un.onInit` 函数中使用 `nsProcess::findProcess` 函数,检查需要关闭的程序是否正在运行。如果正在运行,可以使用 `MessageBox` 函数弹出提示框,询问用户是否要强制关闭并继续卸载。如果用户选择确认,则可以使用 `nsProcess::killProcess` 函数强制关闭指定的程序。
下面是一个示例代码:
```
Function un.onInit
; 需要关闭的程序列表
StrCpy $1 "notepad.exe|calc.exe|..."
; 检查程序是否正在运行
nsProcess::findProcess $1 "" $0
${If} $0 == "0"
; 所有程序都未运行,直接继续卸载
Goto done
${Else}
; 有程序正在运行,弹出提示框
MessageBox MB_ICONQUESTION|MB_YESNO "程序正在运行,是否强制关闭并继续卸载?" IDYES forceClose
${EndIf}
Quit
forceClose:
; 强制关闭指定的程序
nsProcess::killProcess $1
; 继续卸载
Goto done
done:
; 正常卸载流程
...
FunctionEnd
```
需要注意的是,`nsProcess::killProcess` 函数会强制关闭指定的程序,可能会导致数据丢失或其他不可预知的问题,因此需要谨慎使用。同时,在弹出提示框时,需要向用户清楚地说明可能会发生的风险和影响,以便用户可以做出明智的选择。