「net start service」と「sc start」の違いは何ですか?

「net start service」と「sc start」の違いは何ですか?

コマンド プロンプト シェルの 2 つのコマンドを使用して、サービスを停止および開始できます。

  1. net start service "何らかのサービス"
  2. sc は「何らかのサービス」を開始します

これらのコマンドの違いは何ですか?

答え1

Windows NT では、両方のコマンドは同じサービス マネージャーにアクセスします。違いは主にユーザーに表示される部分にあります。

  • net実際のところ、MS-DOS や OS/2 の時代から古いものです。

    scWindows NTでのみ登場(どのバージョンかは不明)

  • netサービスを開始、停止、一時停止することしかできません。

    scより高度な制御が可能で、状態を照会したり、サービスを作成および削除したり、構成やセキュリティを変更したりできます。sc config beep start= demand

  • netローカルでのみ動作します。

    scネットワーク経由で使用可能:sc \\snow start rpcapd

  • net表示名を受け入れます:net start "Windows Firewall"

    sc常にサービス名が必要です:sc start SharedAccess

答え2

Grawityさんの回答は確かに役に立ったが、これらのコマンドの間には根本的な違いがあることがわかった。http://cbfive.com/command-line-service-management-net-v-sc/特に、このページでは、これら2つのコマンドは、タイミング:「net」は同期で、「sc」は非同期です。

SC は制御をサービスに送信し、コマンド プロンプトに戻ります。 これにより、通常、SC START はサービスを START_PENDING 状態で返します。 NET STARTは、開始するサービスが完全に開始状態になるまで待ってから戻ります。コマンドプロンプトで制御します。

...

SC STARTのように、SC STOPはサービスが停止するまで待機しません そのため、多くのサービス停止操作に対して STOP_PENDING が返されることがよくあります。 一方、NET STOPはサービスが停止するまで待機します。 コマンドプロンプトに戻る前に。

...

NET と SC では、成功条件と見なすものに関して異なる考え方を持っています。 SC が成功したかどうかを判断するために尋ねる質問は、「サービスに停止コントロールを正常に送信しましたか?」です。正常に送信された場合、サービスが停止したかどうかに関係なく、成功条件を満たしたことになります。NET は、「停止しようとしたサービスが正常に停止したことを返しましたか?」と尋ねます。正常に停止した場合は、条件を満たしたことになります。正常に停止しなかった場合は、理由に関係なく、NET は成功条件を満たしていません。

答え3

参考までに、sc start/stop の方が net start/stop よりも信頼性が高いことがわかりました。net start/stop によってサービスが開始中または停止中の状態で停止することがありましたが、sc start/stop ではこのようなことは一度もありませんでした。net start/stop の症状は、サービスが (taskkill によって) 強制終了された場合、つまり taskkill の後に net start でサービスを開始しようとすると、より頻繁に発生する傾向があります。

答え4

つまり、サービスの OnStart() ルーチンに時間がかかりすぎる場合は、NET STARTサービスに停止コマンドを送信し、次のエラーを返します。

ServiceName サービスが起動しています.......

ServiceName サービスを開始できませんでした。

サービスはエラーを報告しませんでした。

NET HELPMSG 3534 と入力すると、さらに詳しいヘルプが表示されます。

サービスは正常に開始および停止されているにもかかわらず、この問題が発生します。

ここでこの投稿も見つけました。興味深いかもしれません: サービスを開始できませんでした

関連情報