使用nsis 在卸载过程遍历判断多个程序是否正在运行,如果在运行,则弹出”XX程序正在运行,关闭后再卸载“
时间: 2023-12-10 10:39:25 浏览: 249
可以通过以下步骤实现:
1. 在卸载过程中,获取需要判断的程序的进程名或窗口标题等标识信息。
2. 遍历所有正在运行的进程,判断是否有需要判断的程序正在运行。
3. 如果有程序正在运行,则弹出提示框,告知用户该程序正在运行,需要先关闭程序才能继续卸载。
以下是示例代码(仅供参考):
```
!include "LogicLib.nsh"
Function CheckRunningProcesses
; 需要判断的程序列表
StrCpy $0 "notepad.exe|calc.exe|chrome.exe"
StrCpy $1 "Notepad|Calculator|Google Chrome"
; 将列表拆分成单个程序名
StrCpy $2 $0 1
loop:
StrCmp $2 "" done
StrCpy $3 $2 "" "."
StrCpy $4 $2 "" $3
StrCpy $2 $2 "" ".$3"
StrCpy $5 $1 "" $4
Push $4
Push $5
Call CheckProcessRunning
Pop $5
Pop $4
StrCmp $5 "true" running
Goto loop
done:
FunctionEnd
Function CheckProcessRunning
Exch $0 ; 进程名
Exch 1 ; 窗口标题
Push $1 ; 返回值变量
Push $2 ; 进程ID变量
; 遍历所有进程
System::Call 'kernel32::CreateToolhelp32Snapshot(i, i) i \
(0x00000002, 0)'
Pop $3
System::Call '*(&t512)i.r4'
System::Call '*(i,i,i,&i)i.r5 \
($3, &($4), *i, *i) .r6'
StrCpy $2 0
loop:
System::Call 'kernel32::Process32Next(ir6, ir4) i.r5'
StrCmp $5 "0" done
System::Call '*$4(&i,&i,&i,&i,&i,&t256)i'
StrCmpS $0 12 "$5" notmatch ; 判断进程名是否匹配
; 如果有窗口标题,则判断窗口标题是否匹配
StrCmp $1 "" skipchecktitle
FindWindow $2 "$1" "$5"
StrCmp $2 "0" skipchecktitle
; 进程名和窗口标题都匹配,则判断为正在运行
StrCpy $1 "true"
Goto done
skipchecktitle:
Goto loop
notmatch:
Goto loop
done:
Pop $2
Pop $1
Pop $0
FunctionEnd
Section
; 在卸载前检查是否有程序正在运行
Call CheckRunningProcesses
Pop $0
StrCmp $0 "true" running
Goto done
running:
MessageBox MB_ICONEXCLAMATION|MB_OK \
"请先关闭所有正在运行的程序后再卸载。"
Abort ; 终止卸载过程
done:
SectionEnd
```
阅读全文
相关推荐
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![nsh](https://img-home.csdnimg.cn/images/20250102104920.png)
![txt](https://img-home.csdnimg.cn/images/20241231045021.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)