回答:
SC
(サービス制御)コマンドを使用すると、単なるstart
&以外の多くのオプションが提供されますstop
。
説明: SCは、との通信に使用されるコマンドラインプログラムです。 NTサービスコントローラとサービス。 使用法: sc <サーバー> [コマンド] [サービス名] ... オプション<server>の形式は "\\ ServerName"です 「sc [command]」と入力すると、コマンドの詳細なヘルプが表示されます。 コマンド: query -----------サービスのステータスを問い合わせます。 サービスのタイプのステータスを列挙します。 queryex ---------サービスの拡張ステータスを照会する、または サービスのタイプのステータスを列挙します。 start -----------サービスを開始します。 pause ----------- PAUSE制御要求をサービスに送信します。 interrogate -----サービスにINTERROGATE制御要求を送信します。 continue -------- CONTINUE制御要求をサービスに送信します。 stop ------------サービスにSTOP要求を送信します。 config ----------サービス(永続)の構成を変更します。 description -----サービスの説明を変更します。 失敗---------失敗時にサービスによって実行されるアクションを変更します。 qc --------------サービスの構成情報を照会します。 qdescription ----サービスの説明を照会します。 qfailure --------障害時にサービスによって実行されたアクションを照会します。 削除----------(レジストリから)サービスを削除します。 create ----------サービスを作成します。(レジストリに追加します)。 control ---------サービスにコントロールを送信します。 sdshow ----------サービスのセキュリティ記述子を表示します。 sdset -----------サービスのセキュリティ記述子を設定します。 GetDisplayName-サービスのDisplayNameを取得します。 GetKeyName ------サービスのServiceKeyNameを取得します。 EnumDepend ------サービスの依存関係を列挙します。 次のコマンドはサービス名を必要としません。 sc <サーバー> <コマンド> <オプション> boot ------------(ok | bad)最後のブートが必要かどうかを示します 最新の既知のブート構成として保存される ロック------------サービスデータベースをロックします QueryLock ------- SCManagerデータベースのLockStatusを照会します 例: MyServiceのsc開始
net start [serviceName]
そして
net stop [serviceName]
彼らが成功したか失敗したかをはっきりと伝えてください。例えば
U:\>net stop alerter
The Alerter service is not started.
More help is available by typing NET HELPMSG 3521.
バッチファイルから実行している場合は、戻りコードのERRORLEVELにアクセスできます。0は成功を示します。それ以上の値は失敗を示します。
バットファイルとしてerror.bat
:
@echo off
net stop alerter
if ERRORLEVEL 1 goto error
exit
:error
echo There was a problem
pause
出力は次のようになります。
U:\>error.bat
The Alerter service is not started.
More help is available by typing NET HELPMSG 3521.
There was a problem
Press any key to continue . . .
戻りコード
- 0 = Success
- 1 = Not Supported
- 2 = Access Denied
- 3 = Dependent Services Running
- 4 = Invalid Service Control
- 5 = Service Cannot Accept Control
- 6 = Service Not Active
- 7 = Service Request Timeout
- 8 = Unknown Failure
- 9 = Path Not Found
- 10 = Service Already Running
- 11 = Service Database Locked
- 12 = Service Dependency Deleted
- 13 = Service Dependency Failure
- 14 = Service Disabled
- 15 = Service Logon Failure
- 16 = Service Marked For Deletion
- 17 = Service No Thread
- 18 = Status Circular Dependency
- 19 = Status Duplicate Name
- 20 = Status Invalid Name
- 21 = Status Invalid Parameter
- 22 = Status Invalid Service Account
- 23 = Status Service Exists
- 24 = Service Already Paused
2015年4月20日編集
戻りコード:
NETコマンドは、文書化されたWin32_Serviceクラスの戻りコード(サービスがアクティブではない、サービスリクエストのタイムアウトなど)を返さず、多くのエラーの場合、単純にErrorlevel 2を返します。
ここを見てください:http : //ss64.com/nt/net_service.html
NET
ではない一方で、単にサービス関連機能のためにSC
あるだけのサービス関連機能のために。
errorlevel
返される値は2であるため、エラー結果の解釈方法についてはこちらをご覧ください。
私はこのための個人用バッチファイルを作成しました。私のものは少し異なりますが、必要に応じて自由に変更してください。退屈で、終了、開始、停止、または自動設定を入力できる簡単な方法を作りたかったので、少し前に作成しました。このBATファイルは、サービス名を入力するように要求するだけで、残りは自動的に行われます。私は彼が何かエラーを述べている何かを探していたことに気づかなかった、私はその部分を誤って読んだに違いない。通常、これは行の最後に>> output.txtを入力することで実行できます。
%var%は、別のサービスを開始/停止するたびにbatファイルを変更しなくても、ユーザーが独自のサービスをこれに入力できるようにするための手段です。
私が間違っている場合は、誰でも自由に修正できます。
@echo off
set /p c= Would you like to start a service [Y/N]?
if /I "%c%" EQU "Y" goto :1
if /I "%c%" EQU "N" goto :2
:1
set /p var= Service name:
:2
set /p c= Would you like to stop a service [Y/N]?
if /I "%c%" EQU "Y" goto :3
if /I "%c%" EQU "N" goto :4
:3
set /p var1= Service name:
:4
set /p c= Would you like to disable a service [Y/N]?
if /I "%c%" EQU "Y" goto :5
if /I "%c%" EQU "N" goto :6
:5
set /p var2= Service name:
:6
set /p c= Would you like to set a service to auto [Y/N]?
if /I "%c%" EQU "Y" goto :7
if /I "%c%" EQU "N" goto :10
:7
set /p var3= Service name:
:10
sc start %var%
sc stop %var1%
sc config %var2% start=disabled
sc config %var3% start=auto
からの戻りコードを使用することはnet start
、net stop
私にとって最良の方法のようです。これを見てみてください:Net Start戻りコード。
構文はいつも私を捕まえます...だから...
両方のマシンの管理者で、管理者として.batを実行し、マシンが同じドメインにある場合に、(別のマシンの)リモートサービスを強制終了するバッチファイルに行を追加する方法を明示的に示します。マシン名はUNC形式\ myserverに従います
sc \\ip.ip.ip.ip stop p4_1
この場合、Service Managerでサービスのプロパティを表示すると、p4_1はサービス名と表示名の両方でした。サービス名を使用する必要があります。
Service Ops中毒者のために...理由コードとコメントを必ず追加してください!つまり、「計画済み」に等しい「4」とコメントし、「メンテナンスのためにサーバーを停止しています」
sc \\ip.ip.ip.ip stop p4_1 4 Stopping server for maintenance
CMD
他のユーザー/ IDとして実行し、runas /user:Domain\UserName cmd
パスワードを入力します。CMDは、指定されたユーザーアカウントとして実行を開始します。
「ネットストップ」でサービスが止まると思います。悲しいことに、現実はそれほど白黒ではありません。サービスの停止に時間がかかる場合、コマンドはサービスが停止する前に戻ります。ただし、エラーレベルを確認しないとわかりません。
解決策は、サービスが停止するまでサービスの状態を探してループし、ループするたびに一時停止することです。
しかし、再び...
最初のサービスの停止に時間がかかり、その後のサービスの「ネットストップ」で何も実行されないようです。サービスマネージャーでサービスを確認します。その状態はまだ「開始済み」です。「停止中」に変更はありません。しかし、この2番目のサービスはSCMを使用して手動で停止でき、3秒または4秒で停止します。
上記のJonasの例を使用して、0〜24のエラーレベルの完全なリストを作成しました。他の投稿は正解でnet start
あり、成功したnet stop
場合はerrorlevel
0、失敗した場合は2 のみを使用します。
しかし、これは私にとってうまくいきました:
net stop postgresql-9.1
if %errorlevel% == 2 echo Access Denied - Could not stop service
if %errorlevel% == 0 echo Service stopped successfully
echo Errorlevel: %errorlevel%
に変更stop
しstart
、逆に動作します。
手動によるサービスの再起動は問題ありません-services.mscには「再起動」ボタンがありますが、コマンドラインではscコマンドとnetコマンドの両方に「再起動」スイッチがありません。再起動がcmd / batファイルでスケジュールされている場合、サービスはすぐに停止して開始されます。サービスはまだ停止されていないためエラーが発生し、シャットダウンするまでに時間がかかります。
これはエラーを生成する可能性があります:sc stop sc start
タイムアウトを挿入することをお勧めします。pingを使用します(1秒ごとにpingします)。sc stop ping localhost -n 60 sc start
以下は、バッチを使用してシステムの復元を開始するWindows 10コマンドです。
sc config swprv start= Auto
これらのコマンドも好きかもしれません:
レジストリ値を変更してシステムの復元を自動開始する
REG ADD "HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ SystemRestore" / v DisableSR / t REG_DWORD / d 0 / f
システムの復元ポイントを作成する
Wmic.exe / Namespace:\ root \ default Path SystemRestore Call CreateRestorePoint "djibe saved your PC"、100、12
システムの復元のディスク使用量を変更する
vssadminがshadowstorageのサイズを変更します/ for = C:/ on = C:/ maxsize = 10%
楽しい
C#でWindowsサービスを書いていますが、stop / uninstall / build / install / startループが疲れすぎました。ミニスクリプトを書き、それreploy.bat
を呼び出して、Visual Studioの出力ディレクトリ(ビルドされたサービス実行可能ファイルがあるディレクトリ)にドロップして、ループを自動化します。
これらの3つの変数を設定するだけです
servicename
:これはWindowsサービスコントロールパネル(services.msc)に表示されます
slndir
:ソリューション(.sln)ファイルを含むフォルダー(完全パスではない)
binpath
:ビルドからのサービス実行可能ファイルへのフルパス(フォルダーパスではない)
注:コマンドを機能させるには、Visual Studio Developer Command Lineから実行する必要がありますmsbuild
。
SET servicename="My Amazing Service"
SET slndir="C:dir\that\contains\sln\file"
SET binpath="C:path\to\service.exe"
SET currdir=%cd%
call net stop %servicename%
call sc delete %servicename%
cd %slndir%
call msbuild
cd %bindir%
call sc create %servicename% binpath=%binpath%
call net start %servicename%
cd %currdir%
多分これは誰かを助ける:)