Ответ 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
)
)