14 ответов:
использовать
SC(service control) команда, это дает вам гораздо больше возможностей, чем просто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
Коды Возврата:
команда NET не возвращает документированные коды возврата класса Win32_Service (Service not Active,Service Request Timeout и т. д.) и для многих ошибок просто возвращает 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в конце строки.The
%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Мне кажется, что это лучший метод. Попробуйте взглянуть на это:чистый старт коды возврата.
синтаксис всегда меня достает.... так...
здесь явно показано, как добавить строку в пакетный файл, который убьет удаленную службу (на другой машине) если вы являетесь администратором на обеих машинах, запустите .bat как администратор, и машины находятся в одном домене. Имя машины следует за форматом 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
мы хотели бы думать, что "чистая остановка" остановит службу. К сожалению, реальность не такая уж черно-белая. Если службе требуется много времени для остановки, команда вернется до остановки службы. Вы не знаете, если вы отметите ошибки.
решение, похоже, заключается в циклическом поиске состояния службы до тех пор, пока оно не будет остановлено, с паузой каждый раз вокруг цикла.
но опять же...
Я вижу впервые служба занимает много времени, чтобы остановиться, а затем "чистая остановка" для последующей службы просто ничего не делает. Посмотрите на службу в диспетчере служб, и ее состояние по - прежнему "запущено" - без изменения на "остановку". Тем не менее, я могу остановить эту вторую службу вручную с помощью SCM, и она останавливается через 3 или 4 секунды.
Я просто использовал пример Джонаса выше и создал полный список от 0 до 24 уровней ошибок. Другой пост правильно, что
net startиnet stopиспользовать толькоerrorlevel0 для успеха и 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и работает в обратном направлении.
ручной перезапуск службы-это ok-services.msc имеет кнопку" Перезагрузка", но в командной строке как sc, так и net командам не хватает переключателя" перезагрузка", и если перезапуск запланирован в файле cmd/bat, служба останавливается и запускается немедленно, иногда она получает ошибку, потому что Служба еще не остановлена, ей нужно некоторое время, чтобы закрыть вещи.
Это может привести к ошибке: СК остановка sc start
Это хорошая идея, чтобы вставить тайм-аут, я использую пинг (он проверяет каждую 1 секунду): Южная Каролина остановка ping localhost-N 60 sc start
иногда вы можете найти стоп-не работает..
мой SQlServer иногда делает это. С помощью следующей командной строки убивает его. Если вам действительно нужен ваш сценарий, чтобы убить вещи, которые не останавливаются. Я бы сделал это в крайнем случае
taskkill /pid [pid number] /f
Я пишу службу windows на C#, цикл stop/uninstall/build/install/start стал слишком утомительным. Написал мини-скрипт, назвал его
reploy.batи упал в мой выходной каталог Visual Studio (тот, который имеет встроенный исполняемый файл службы) для автоматизации цикла.просто установите эти 3 Варс
servicename: это отображается на панели управления Windows Service (services.msc)
slndir: папка (не полный путь), содержащая ваше решение (.ФСЛ) файл
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%может быть, это поможет кому-то :)
Comments