我正在编写NSIS脚本,我需要检查服务状态(正在运行/已停止/已暂停/不存在),然后进行一些操作。
但是我不能使用任何用户库,例如nsSCM。
我找到了一个剧本sc QUERY ServiceNameHere | FIND "RUNNING"
但是我找不到在NSIS脚本中检查返回结果的方法。
请帮忙。
最佳答案
如果可以使用插件:
使用Simple Service Plugin,您可以执行以下操作:
SimpleSC::GetServiceStatus "MyService"
Pop $0 ; returns an errorcode (!=0) otherwise success (0)
Pop $1 ; return the status of the service (see below)
如果成功,则服务状态将具有以下数值之一:
如果您不能使用插件:
请注意,我在FIND.exe中添加了/ C以输出行数而不是整行。另外,请小心修改引号。为了进行正确处理,需要经过反复试验。
StrCpy $R0 '"$SYSDIR\cmd.exe" /c "sc QUERY MyServiceName | FIND /C "RUNNING""'
nsExec::ExecToStack '$R0'
Pop $R1 # contains return code
Pop $R2 # contains output
${If} $R1 == "0"
# command success
${If} $R2 == "1"
# it's running
${Else}
# it's not running
${EndIf}
${Else}
# command failed
${EndIf}
确保包括逻辑库,因为NSIS对于条件语句宏要求这样做:
# Included files
!include LogicLib.nsh
关于service - Windows服务的NSIS检查状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5909659/