gpt4 book ai didi

service - Windows服务的NSIS检查状态

转载 作者:行者123 更新时间:2023-12-01 08:39:17 25 4
gpt4 key购买 nike

我正在编写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)

如果成功,则服务状态将具有以下数值之一:
  • 已停止
  • START_PENDING
  • STOP_PENDING
  • 正在运行
  • CONTINUE_PENDING
  • PAUSE_PENDING
  • 已暂停

  • 如果您不能使用插件:

    请注意,我在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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com