Как я могу написать скрипт bat или cmd, чтобы остановить и надежно запустить службу с проверкой ошибок (или сообщить мне, что по какой-то причине она не удалась)?
288
Как я могу написать скрипт bat или cmd, чтобы остановить и надежно запустить службу с проверкой ошибок (или сообщить мне, что по какой-то причине она не удалась)?
Ответы:
Используйте команду
SC
(service control), она дает вам гораздо больше возможностей, чем простоstart
&stop
.источник
и
скажу вам, были ли они успешными или провалились довольно четко. Например
При запуске из пакетного файла у вас есть доступ к ERRORLEVEL кода возврата. 0 указывает на успех. Все, что выше, означает неудачу.
В файле летучей мыши,
error.bat
:Вывод выглядит так:
Коды возврата
Изменить 20.04.2015
Коды возврата:
Смотрите здесь: http://ss64.com/nt/net_service.html
источник
NET
не только для функций, связанных с сервисом, в то времяSC
как только для функций, связанных с сервисом.errorlevel
возвращает 2, смотрите здесь, как интерпретировать результат ошибки .Вы можете использовать команду NET START, а затем проверить переменную среды ERRORLEVEL, например:
Отказ от ответственности: я написал это из головы, но я думаю, что это будет работать.
источник
Вместо проверки кодов это тоже работает
источник
Для этого я создал свой личный пакетный файл, мой немного отличается, но вы можете изменить его по своему усмотрению. Я создал это некоторое время назад, потому что мне было скучно, и я хотел, чтобы люди могли просто ввести окончание, запуск, остановку или установку на авто. Этот BAT-файл просто запрашивает ввод имени службы, и он сделает все остальное за вас. Я не осознавал, что он искал что-то, что говорило об ошибке, я, должно быть, неправильно понял эту часть. Хотя обычно это можно сделать, введя >> output.txt в конце строки.
% Var% - это просто способ, позволяющий пользователю вводить в него свой собственный сервис, вместо того, чтобы каждый раз изменять файл bat каждый раз, когда вы хотите запустить / остановить другой сервис.
Если я ошибаюсь, любой может смело поправлять меня в этом.
источник
Использование кодов возврата от
net start
иnet stop
кажется мне лучшим способом. Попробуйте взглянуть на это: коды возврата Net Start .источник
Синтаксис всегда получает меня .... так что ...
Здесь подробно показано, как добавить в пакетный файл строку, которая убьет удаленную службу (на другом компьютере), если вы являетесь администратором на обеих машинах, запустите .bat от имени администратора, и машины будут в одном домене. Имя машины соответствует формату UNC \ myserver
В этом случае ... p4_1 было одновременно именем службы и отображаемым именем при просмотре свойств службы в Service Manager. Вы должны использовать Имя Сервиса.
Для наркоманов Service Ops ... обязательно добавьте свой код причины и комментарий! то есть «4», что равно «Запланировано» и комментарий «Остановка сервера для обслуживания»
источник
CMD
от имени другого пользователя / идентификатора,runas /user:Domain\UserName cmd
затем вводите пароль. CMD начнет работать как указанная учетная запись пользователя.Мы хотели бы думать, что «чистый стоп» остановит сервис. К сожалению, реальность не такая уж черно-белая. Если для остановки службы требуется много времени, команда вернется до остановки службы. Вы не будете знать, хотя, если вы не проверите уровень ошибки.
Похоже, что решение состоит в том, чтобы циклически проверять состояние службы до ее остановки, с паузой каждый раз вокруг цикла.
Но затем снова...
Я вижу, что первая служба долго останавливается, а затем «чистая остановка» для следующей службы, похоже, ничего не делает. Посмотрите на сервис в диспетчере сервисов, и его состояние все еще "Запущено" - без изменений в "Остановка". Тем не менее, я могу остановить этот второй сервис вручную с помощью SCM, и он останавливается через 3 или 4 секунды.
источник
или вы можете запустить удаленный сервис с помощью этого cmd:
sc \\<computer> start <service>
источник
Я просто использовал приведенный выше пример Джонаса и создал полный список от 0 до 24 уровней ошибок. Другой пост является правильным,
net start
иnet stop
использовать толькоerrorlevel
0 для успеха и 2 для неудачи.Но вот что сработало для меня:
Изменить
stop
наstart
и работает в обратном порядке.источник
Ручной перезапуск службы в порядке - services.msc имеет кнопку «Перезагрузка», но в командной строке в командах sc и net отсутствует переключатель «перезапуск», и если перезапуск запланирован в файле cmd / bat, служба останавливается и запускается немедленно, иногда получает ошибку, потому что служба еще не остановлена, ей нужно некоторое время, чтобы завершить работу.
Это может привести к ошибке: sc stop sc start
Это хорошая идея для вставки тайм-аута, я использую ping (он пингуется каждые 1 секунду): sc stop ping localhost -n 60 sc start
источник
Вот команда Windows 10 для запуска восстановления системы с помощью пакета:
Вам также могут понравиться эти команды:
Измените значение реестра для автоматического запуска восстановления системы
REG ДОБАВИТЬ "HKLM \ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Microsoft \ Windows NT \ CurrentVersion \ SystemRestore" / v DisableSR / t REG_DWORD / d 0 / f
Создать точку восстановления системы
Wmic.exe / Пространство имен: \ root \ default Путь SystemRestore Вызов CreateRestorePoint «djibe спас ваш компьютер», 100, 12
Изменить использование диска восстановления системы
vssadmin изменить размер shadowstorage / for = C: / on = C: / maxsize = 10%
наслаждаться
источник
SC
со службами можно делать все ... запускать, останавливать, проверять, настраивать и многое другое ...источник
Иногда вы можете найти остановку не работает ..
Мой SQlServer иногда делает это. Использование следующей командной строки убивает это. Если вам действительно нужен сценарий, чтобы убивать вещи, которые не прекращаются. Я бы сделал это в крайнем случае
источник
Я пишу службу Windows в C #, цикл остановки / удаления / сборки / установки / запуска стал слишком утомительным. Написал мини-скрипт, вызвал его
reploy.bat
и поместил в мой выходной каталог Visual Studio (в котором есть исполняемый файл встроенной службы) для автоматизации цикла.Просто установите эти 3 переменные
servicename
: это отображается на панели управления Windows Service (services.msc)slndir
: папка (не полный путь), содержащая файл вашего решения (.sln)binpath
: полный путь (не путь к папке) к исполняемому файлу службы из сборкиПРИМЕЧАНИЕ. Эту команду необходимо запустить из командной строки разработчика Visual Studio
msbuild
.Может быть, это кому-то помогает :)
источник