إيقاف وبدء تشغيل الخدمة عن طريق دفعة أو cmd الملف ؟

StackOverflow https://stackoverflow.com/questions/133883

سؤال

كيف يمكنني النصي bat او cmd إيقاف وبدء خدمة موثوق مع التحقق من الخطأ (أو اسمحوا لي أن أعرف أنه لم يكن ناجحا لأي سبب من الأسباب)?

هل كانت مفيدة؟

المحلول

استخدام SC (خدمة التحكم) الأمر, فهو يوفر لك الكثير من الخيارات فقط start & stop.

  DESCRIPTION:
          SC is a command line program used for communicating with the
          NT Service Controller and services.
  USAGE:
      sc <server> [command] [service name]  ...

      The option <server> has the form "\\ServerName"
      Further help on commands can be obtained by typing: "sc [command]"
      Commands:
        query-----------Queries the status for a service, or
                        enumerates the status for types of services.
        queryex---------Queries the extended status for a service, or
                        enumerates the status for types of services.
        start-----------Starts a service.
        pause-----------Sends a PAUSE control request to a service.
        interrogate-----Sends an INTERROGATE control request to a service.
        continue--------Sends a CONTINUE control request to a service.
        stop------------Sends a STOP request to a service.
        config----------Changes the configuration of a service (persistant).
        description-----Changes the description of a service.
        failure---------Changes the actions taken by a service upon failure.
        qc--------------Queries the configuration information for a service.
        qdescription----Queries the description for a service.
        qfailure--------Queries the actions taken by a service upon failure.
        delete----------Deletes a service (from the registry).
        create----------Creates a service. (adds it to the registry).
        control---------Sends a control to a service.
        sdshow----------Displays a service's security descriptor.
        sdset-----------Sets a service's security descriptor.
        GetDisplayName--Gets the DisplayName for a service.
        GetKeyName------Gets the ServiceKeyName for a service.
        EnumDepend------Enumerates Service Dependencies.

      The following commands don't require a service name:
      sc <server> <command> <option>
        boot------------(ok | bad) Indicates whether the last boot should
                        be saved as the last-known-good boot configuration
        Lock------------Locks the Service Database
        QueryLock-------Queries the LockStatus for the SCManager Database
  EXAMPLE:
          sc start MyService

نصائح أخرى

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 يشير إلى نجاح.أي شيء أعلى يشير إلى الفشل.

كما bat 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

تحرير 20.04.2015

عودة رموز:

صافي الأمر لا عودة موثقة Win32_Service الدرجة عودة رموز (الخدمة غير نشطة,خدمة طلب مهلة ، الخ) والعديد من الأخطاء ببساطة العودة Errorlevel 2.

انظر هنا: http://ss64.com/nt/net_service.html

يمكنك استخدام الأمر NET START ومن ثم التحقق من ERRORLEVEL متغير البيئة ، مثل

net start [your service]
if %errorlevel% == 2 echo Could not start service.
if %errorlevel% == 0 echo Service started successfully.
echo Errorlevel: %errorlevel%

تنويه:لقد كتبت هذا من أعلى رأسي ، ولكن أعتقد أنه سوف يعمل.

بدلا من التحقق من رموز هذا يعمل أيضا

net start "Apache tomcat" || goto ExitError

:End  
exit 0  

:ExitError  
echo An error has occurred while starting the tomcat services  
exit 1  

لقد خلق الشخصية ملف دفعي لهذا الألغام هو مختلفة قليلا ولكن لا تتردد في تعديل النحو الذي تراه مناسبا.أنا خلقت هذا قبل قليل لأنني كنت بالملل وتريد تقديم طريقة بسيطة على الناس أن تكون قادرة على إدخال تنتهي ، بدء إيقاف أو الإعداد لصناعة السيارات.هذا 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 يبدو أن أفضل طريقة بالنسبة لي.حاول نظرة على هذا: صافي بدء عودة رموز.

جملة دائما يحصل لي....لذا...

هنا صراحة كيفية إضافة سطر إلى ملف دفعي التي من شأنها أن تقتل البعيد خدمة (على جهاز آخر) إذا كنت المشرف على الجهازين, تشغيل .الخفافيش كمسؤول و الآلات هي على نفس المجال.اسم الجهاز يتبع تنسيق UNC \myserver

sc \\ip.ip.ip.ip stop p4_1

في هذه الحالة...p4_1 كان كل اسم الخدمة و اسم العرض عند عرض خصائص خدمة في إدارة الخدمة.يجب عليك استخدام اسم الخدمة.

الخدمة الخاصة بك العمليات الحشاشون...تأكد من إلحاق السبب الخاص بك رمز والتعليق!أي'4' الذي يساوي 'التخطيط' تعليق 'وقف خادم الصيانة'

sc \\ip.ip.ip.ip stop p4_1 4 Stopping server for maintenance

نود أن نعتقد أن "net stop" سيتم إيقاف الخدمة.للأسف الواقع ليس أن الأبيض والأسود.إذا كانت الخدمة يأخذ وقت طويل أن يتوقف الأمر سيعود قبل الخدمة قد توقفت.لن تعرف, على الرغم, إلا إذا تحقق errorlevel.

الحل يبدو أن حلقة مستديرة تبحث عن الدولة من الخدمة حتى يتم توقفت مع توقف في كل مرة على مدار الحلقة.

ولكن بعد ذلك مرة أخرى...

أنا أرى أول خدمة يستغرق وقتا طويلا إلى التوقف ، ثم "net stop" للحصول على الخدمة التالية يظهر فقط أن تفعل شيئا.نظرة على الخدمة في إدارة خدمات و الدولة لا تزال "بدأت" لا تغيير "وقف".حتى الآن أنا يمكن أن تتوقف هذه الخدمة الثانية يدويا باستخدام SCM, و يتوقف في 3 أو 4 ثوان.

أو يمكنك بدء تشغيل خدمة التحكم عن بعد مع هذا cmd : sc \\<computer> start <service>

أنا فقط استخدام جوناس المثال أعلاه و إنشاء قائمة كاملة من 0 إلى 24 errorlevels.وظيفة أخرى هو الصحيح أن 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 ويعمل في الاتجاه المعاكس.

دليل إعادة تشغيل الخدمة على ما يرام - خدمات.msc لديه زر "إعادة التشغيل" ، ولكن في سطر الأوامر سواء sc net الأوامر يفتقر إلى "إعادة تشغيل" التبديل إذا كان إعادة المقرر في cmd/bat الخدمة توقفت وبدأت على الفور ، وأحيانا يحصل خطأ لأن الخدمة لم يتوقف بعد ، فإنه يحتاج إلى بعض الوقت لاغلاق الأمور.

وهذا قد يولد خطأ:sc توقف sc تبدأ

انها فكرة جيدة لإدراج مهلة يمكنني استخدام بينغ (الأصوات كل 1 ثانية):sc توقف ping localhost -ن 60 sc تبدأ

SC يمكن أن تفعل كل شيء مع خدمات...بداية, وقف, تحقق, تكوين, وأكثر من ذلك...

في بعض الأحيان يمكنك العثور على التوقف لا تعمل..

بلدي SQlServer في بعض الأحيان لا يفعل هذا.باستخدام التالية فلكس يقتل.إذا كنت حقا بحاجة إلى البرنامج النصي الخاص بك لقتل الاشياء التي لا تتوقف.أود أن يكون ذلك هل هذا كحل أخير

taskkill /pid [pid number] /f

هنا هو ويندوز 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 /مساحة: oot\المسار الافتراضي SystemRestore دعوة CreateRestorePoint "djibe حفظ جهاز الكمبيوتر الخاص بك", 100, 12

  • تغيير نظام إعادة استخدام القرص

    vssadmin تغيير حجم shadowstorage /ل=C:/على=C:/maxsize=10%

الاستمتاع

أنا أكتب خدمة windows في C# ، إيقاف/إلغاء/بناء/تركيب/بدء حلقة حصلت متعبة جدا.كتب مصغرة النصي ، يطلق عليه reploy.bat وانخفض في Visual Studio دليل الإخراج (واحد يحتوي على المدمج الخدمة القابل للتنفيذ) لأتمتة حلقة.

فقط تعيين هذه 3 فأر

servicename :هذا يدل على خدمة Windows لوحة التحكم (الخدمات.msc)

slndir :المجلد (المسار الكامل) يحتوي على الحل (.sln) الملف

binpath :المسار الكامل (غير مسار المجلد) إلى الخدمة القابلة للتنفيذ من بناء

ملاحظة:هذا يحتاج إلى تشغيل من Visual Studio المطور سطر الأوامر من أجل 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%

ربما هذا يساعد شخص ما :)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top