1

バッチ ファイルから (を使用してsc start XXX) サービスを開始する必要がありますが、自動スタートアップ タイプで構成されている場合のみです。

の指示を読み、sc /?最初にコマンドを呼び出して構成を照会し、結果に対して findstr を使用しようとしましたが、コマンドsc qc XXXの後に次のエラーが発生しました。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コマンドラインから呼び出して停止/開始できるので、これは奇妙です。

何か不足していますか?それを行うより良い方法はありますか?

4

1 に答える 1

8

わかりました、私はそれを理解しました。

最初に、お詫び申し上げます。元のエラーは実際には次のとおりでした。

[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
    )
)
于 2013-10-09T07:51:40.093 に答える