わかりました、私はそれを理解しました。
最初に、お詫び申し上げます。元のエラーは実際には次のとおりでした。
[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
)
)