service - Windows服务的NSIS检查状态

标签 service nsis

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

    相关文章:

    linux - 无法从 ubuntu 中的服务连接到 session dbus

    移动位置后 MongoDB 服务不会启动 (Centos 7.1.1503)

    tomcat - Nsis服务删除

    email - 从服务grails调用的模板中获取当前域

    WCF 服务错误 400 错误请求

    java - 尝试在服务中处理不同的场景

    command-line-arguments - 可以通过命令行指定输出文件目录吗?

    debugging - 调试 NSIS 安装程序的方法?

    NSIS 多个 if 条件

    delphi - NSIS 插件 "nsScreenshot"在 Windows NT 6.x 中无法工作