如何从批处理脚本检查服务启动类型? (在Windows 7中)

时间:2013-10-08 15:38:09

标签: windows batch-file windows-7

我需要从批处理文件(使用sc start XXX)启动服务,但仅限于配置了自动启动类型。

我阅读了sc /?的说明,我尝试先调用sc qc XXX命令来查询它的配置,然后在结果上使用findstr,但是在{{1}之后我收到了以下错误命令:

sc qc XXX

指定的服务不作为已安装的服务存在。

这很奇怪,因为我可以调用[SC] QueryServiceConfig FAILED 122: The data area passed to a system call is too small. [SC] GetServiceConfig needs 718 bytes 并从命令行停止/启动它。

我错过了什么吗?有没有更好的方法呢?

1 个答案:

答案 0 :(得分:6)

好的,我只是想通了。

首先,我必须道歉,因为最初的错误实际上是:

[SC] QueryServiceConfig FAILED 122:

The data area passed to a system call is too small.

[SC] GetServiceConfig needs 718 bytes

而不是

[SC] OpenService FAILED 1060:

正如我先说的那样。

显然,我必须向我的服务明确添加缓冲区大小: sc qc XXX 1000

执行此操作后,我注意到BINARY_PATH_NAME字段对于XXX非常长,所以我猜默认内存分配不够。

现在,由于我基本上欠我的职业生涯StackOverflow,我将发布我的完整代码:)

rem start a service, but only if it is configured as automatic, and only if it isn't running already
for /F "tokens=3 delims=: " %%H in ('sc qc %xxx% 1000^| findstr "START_TYPE"') do (
    if /I "%%H" EQU "AUTO_START" (
        rem check if service is stopped
        for /F "tokens=3 delims=: " %%H in ('sc query %xxx% ^| findstr "STATE"') do (
            if /I "%%H" EQU "STOPPED" (
                echo net start %xxx%
                net start %xxx%
            ) else (
                echo %xxx% is already running
            )
        )
    ) else (
        echo Skipping %xxx% since it's not defined as automatic start
    )
)