Подтвердить что ты не робот

Как проверить тип запуска службы из пакета script? (в окнах 7)

Мне нужно запустить службу из командного файла (используя sc start XXX), но ТОЛЬКО, если он настроен с автоматическим запуском.

Я прочитал инструкции sc /?, и я попытался сначала вызвать команду sc qc XXX, чтобы запросить его конфигурацию, а затем использовать findstr для результата, но после команды sc qc XXX я получил следующую ошибку:

[SC] QueryServiceConfig FAILED 122:

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

[SC] GetServiceConfig needs 718 bytes

Указанная служба не существует как установленная служба.

Это нечетно, потому что я могу вызвать sc config XXX и остановить/запустить его из командной строки.

Я что-то упустил? Есть ли лучший способ сделать это?

4b9b3361

Ответ 1

Хорошо, я только что понял.

Во-первых, я должен извиниться, так как исходная ошибка была на самом деле:

[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 not defined as automatic start
    )
)