sc - サービスを操作する

にメンテナンス済み

scコマンドは、Windows のサービスを操作するコマンドです。サービスとは、サインインしなくてもバックグラウンドで動き続けるプログラム(印刷、Windows Update、ネットワーク機能など)のことです。

scを使うと、サービスの状態確認、起動・停止、スタートアップの種類(自動・手動・無効)の変更をコマンドだけで行えます。GUI の「サービス」画面(services.msc)を開かなくても済むため、バッチファイルに組み込むのにも向いています。

scコマンドの基本構文

sc <コマンド> <サービス名> [オプション]

最初の引数に「何をするか」を指定し、続けて対象のサービス名を指定します。主なコマンドは次のとおりです。

コマンド内容
sc queryサービスの状態を表示する
sc qcサービスの構成(起動の種類など)を表示する
sc startサービスを起動する
sc stopサービスを停止する
sc pauseサービスを一時停止する
sc continue一時停止したサービスを再開する
sc configサービスの構成(起動の種類など)を変更する
sc create新しいサービスを登録する
sc deleteサービスの登録を削除する
PowerShell では sc.exe と入力する

Windows PowerShell(5.1)では、scがSet-Contentコマンドレットの別名(エイリアス)になっています。そのままsc query Spoolerと入力してもサービスは操作できないため、sc.exe query Spoolerのように拡張子まで入力してください。この記事のコマンドは、コマンドプロンプトで実行する前提で書いています。

サービス名と表示名

サービスには、services.mscで見える表示名(例:Print Spooler)とは別に、コマンドで指定するサービス名(例:Spooler)があります。scで指定するのはサービス名のほうです。

sc queryの結果に、サービス名(SERVICE_NAME)と表示名(DISPLAY_NAME)が並んで表示されるので、対応を確かめられます。

サービスの状態を確認する

サービス名を指定してsc queryを実行します。

sc query Spooler
- □ ×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>sc query Spooler
SERVICE_NAME: Spooler
TYPE : 110 WIN32_OWN_PROCESS (interactive)
STATE : 4 RUNNING
(STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
C:\users\user>

STATEが現在の状態です。主な値は次のとおりです。

STATE の値意味
RUNNING実行中
STOPPED停止中
START_PENDING起動処理中
STOP_PENDING停止処理中
PAUSED一時停止中

サービス名を付けずにsc queryだけを実行すると、実行中のサービスが一覧で表示されます。停止中のものも含めて表示するには、state= allを指定します。

sc query type= service state= all
オプションの = の後ろにはスペースが必要

scのオプションは、type= serviceのように**=の直後に半角スペース**を入れる必要があります。type=serviceと続けて書くとエラーになります。=の前にはスペースを入れません。

一覧が長いときは、moreやfindと組み合わせると読みやすくなります。

sc query type= service state= all | find "SERVICE_NAME"

サービスの構成を確認する

sc qc(query config)で、起動の種類や実行ファイルのパスを確認できます。

sc qc Spooler

START_TYPEに起動の種類が、BINARY_PATH_NAMEにサービスの実行ファイルが表示されます。

サービスを起動・停止する

起動はsc start、停止はsc stopです。

sc start Spooler
sc stop Spooler
管理者権限が必要

サービスの起動・停止・構成変更には、多くの場合管理者権限が必要です。通常権限のコマンドプロンプトで実行すると「アクセスが拒否されました(エラー 5)」となります。管理者として実行する方法は、関連記事を参照してください。状態の確認(sc query)は通常権限でもできます。

sc stopは停止の要求を送るだけで、停止が完了するのを待ちません。実行直後はSTOP_PENDINGと表示されることがあり、少し待ってからsc queryでSTOPPEDになったかを確かめます。

サービスを再起動する

scに再起動コマンドはないので、停止して起動し直します。停止の完了を待つためにtimeoutを挟みます。

restart-spooler.cmd
@echo off

sc stop Spooler
timeout /t 3 /nobreak >nul
sc start Spooler

停止に時間がかかるサービスでは、3 秒では足りないことがあります。確実に待ちたいときは、後述の「状態を待つ」方法を使ってください。

net start/net stopとの違い

net start サービス名とnet stop サービス名でも、サービスを起動・停止できます。

net stop Spooler
net start Spooler

net stopは、サービスが停止するまで待ってから戻ります。また、そのサービスに依存している他のサービスも、確認のうえ一緒に停止します。単純に止めて起動したいだけならnetのほうが手軽で、状態の確認や構成の変更までしたいならscが向いています。

スタートアップの種類を変更する

sc configのstart=で、Windows 起動時の動作を変更できます。

sc config Spooler start= demand
指定値スタートアップの種類
auto自動
delayed-auto自動(遅延開始)
demand手動
disabled無効
重要なサービスを無効にしない

サービスを無効にすると、次回の起動以降、そのサービスに依存する機能が使えなくなります。仕組みが分からないサービスの構成は変更しないでください。変更前にsc qcで現在の設定をメモしておくと、元に戻せます。

エラーと対処法

scが失敗すると、[SC] OpenService FAILED 1060:のように、エラー番号付きのメッセージが表示されます。

エラー番号主な原因と対処
5アクセスが拒否された。管理者として実行する
1056すでに起動している。sc queryで状態を確認する
1060サービス名が存在しない。表示名ではなくサービス名を指定しているか確認する
1058無効になっているため起動できない。sc configで起動の種類を変更する
1062サービスが開始されていない(停止済みのサービスを止めようとした)

エラー番号の意味は、net helpmsg 1060のようにnet helpmsgで確認できます。

バッチファイルで状態を判定する

sc queryの出力をfindで検索すると、サービスが動いているかを判定できます。

check-service.cmd
@echo off

sc query Spooler | find "RUNNING" >nul
if errorlevel 1 (
  echo Print Spooler は停止しています。
) else (
  echo Print Spooler は実行中です。
)

findは一致する行があれば終了コード 0、なければ 1 を返すため、if errorlevel 1で「見つからなかった」場合を分岐できます。STATEの値は表示言語に影響されない英語表記なので、日本語環境でも同じ書き方で動作します。

状態を待つ

起動や停止の完了を待つには、状態が目的の値になるまで繰り返し確認します。

wait-stopped.cmd
@echo off

sc stop Spooler >nul

:wait
sc query Spooler | find "STOPPED" >nul
if errorlevel 1 (
  timeout /t 1 /nobreak >nul
  goto wait
)

echo 停止しました。
無限ループに注意

サービスが停止できない状態だと、この例は永遠に待ち続けます。実用するときは、カウンター変数で最大回数を決めておくと安全です。

新しいサービスを登録・削除する

sc createで、自作のプログラムなどをサービスとして登録できます。binPath=には実行ファイルのパスを指定します。

sc create MyService binPath= "C:\tools\myservice.exe" start= demand

不要になったらsc deleteで登録を削除します。

sc delete MyService
削除は元に戻せない

sc deleteは確認なしでサービスの登録を削除します。Windows に標準で入っているサービスを削除すると、システムが正常に動作しなくなるおそれがあります。自分で登録したサービス以外には使わないでください。

なお、通常のプログラムやバッチファイルは、そのままではサービスとして動作しません。サービスとして登録するには、サービス制御マネージャーからの要求に応答できる実装が必要です。

まとめ

やりたいことコマンド
サービスの状態を確認するsc query サービス名
すべてのサービスを一覧表示するsc query type= service state= all
起動の種類などの構成を確認するsc qc サービス名
サービスを起動するsc start サービス名
サービスを停止するsc stop サービス名
起動の種類を変更するsc config サービス名 start= demand
実行中か判定するsc query サービス名 | find "RUNNING"
サービスを登録・削除するsc create / sc delete

関連記事

練習問題

練習問題

PowerShell でsc query Spoolerを実行してもサービスの情報が表示されません。正しい対処はどれでしょうか?

正しいものを 1 つ選んでください。

  1. 管理者として実行し直す
  2. sc.exe query Spooler のように拡張子まで入力する
  3. サービス名を表示名に変える

練習問題

サービスのスタートアップの種類を「手動」に変更するコマンドはどれでしょうか?

正しいものを 1 つ選んでください。

  1. sc config Spooler start=demand
  2. sc config Spooler start= demand
  3. sc start Spooler manual
#コマンドプロンプト #バッチファイル #コマンドライン #コマンド #サービス #管理者権限