Показать полную графическую версию : [решено] Остановка и запуск службы
TERMINAL
02-03-2011, 19:23
Добрый день !
Подскажите плз, какими командами можно останавливать и запускать службу ?
какими командами можно останавливать и запускать службу ? »
Run(@ComSpec & ' /C Net Start Service', '', @SW_HIDE)
Run(@ComSpec & ' /C Net Stop Service', '', @SW_HIDE)
TERMINAL
03-03-2011, 09:50
RunWait(@ComSpec & ' /C Net Stop NameService', @SW_HIDE)
RunWait(@ComSpec & ' /C Net Start NameService', @SW_HIDE)
SharkyEXE
24-12-2017, 02:55
Всем здравствуйте.
Пожалуйста , помогите мне , пожалуйста.
Есть служба wscsvc ( Центр обеспечения безопасности )
Хочется запускать службу wscsvc с интервалом 1 секунда , пока состояние службы wscsvc не станет как Работает
Как только состояние службы wscsvc станет Работает - завершить работу скрипта
Реализации хочется чем проще тем лучше - хотелось при помощи sc query "wscsvc"
запускать службу wscsvc с интервалом 1 секунда »
Э… это, простите, зачем так?!
SharkyEXE
24-12-2017, 11:30
Iska
Здравствуйте.
Может быть не так выразился , мне требуется , чтобы служба была 100,1% запущена и это было проверено , можно не одним способом ( sc query "wscsvc" , может еще есть какие-то методы , я был бы очень благодарен ).
Только после 100,1% запущенной службы wscsvc я буду делать следующие шаги
Просто если служба wscsvc не запущена , а отчиталось , что служба wscsvc запущена - дальше мне нет смысла ничего делать , без запущенной на самом деле службы wscsvc далее ничего не поулчится
А то как в жизни , можно отчитаться , что все выполнено , все запущено , а на самом деле палец о палец ничего не сделано , ничего не запущено
SharkyEXE,
Чем вас не устраивает возврат результата проверки состояния службы консольной утилиты SC.exe?
Какая ваша конечная цель, зачем вам знать состояние этой службы и что вы хотите делать потом?
SharkyEXE
24-12-2017, 12:12
Казбек
Здравствуйте.
1) Если Вы про это ( на примере службы Winmgmt = Инструментарий управления Windows ):
https://cloud.mail.ru/public/FsMR/S2o85Cs8n
https://cloud.mail.ru/public/JZdi/8PzUyVVWj
https://cloud.mail.ru/public/8wtE/e1GrtvxsS
то мне из всего этого бардака=барахла , хочется только статусы , только три слова
STOPPED
RUNNING
PAUSED
2) Только после 100,1% что запущена служба wscsvc , только после 100,1% работает служба wscsvc , повторюсь , проверенной на предмет что 100,1% запущена , проверенной на предмет что 100,1% работает , не одним способом ( sc query "wscsvc" , может еще есть какие-то методы , я был бы очень благодарен ) , я буду делать нижеследующие действия
Opt ( "WinTitleMatchMode", 2 )
$SystemDriveLetter = EnvGet ( "SystemDrive" )
# Панель управления\Все элементы панели управления\Центр поддержки
# Запуск окна с заголовком " Настройка центра поддержки "
Run ( $SystemDriveLetter & "\Windows\System32\control.exe" & " /name Microsoft.ActionCenter /page Settings", "", @SW_HIDE )
# Ожидаем появления окна с заголовком " Настройка центра поддержки "
WinWait ( "Настройка центра поддержки", "" )
# Активируем окно с заголовком " Настройка центра поддержки "
WinActivate ( "Настройка центра поддержки", "" )
WinWaitActive ( "Настройка центра поддержки", "" )
WinSetOnTop ( "Настройка центра поддержки", "", 1 )
# WinSetState ( "Настройка центра поддержки", "", @SW_MAXIMIZE )
# Центр обновления Windows
Func1("Настройка центра поддержки","1")
# Защита от шпионских программ
Func1("Настройка центра поддержки","2")
# Параметры безопасности Интернета
Func1("Настройка центра поддержки","3")
# Контроль учетных записей
Func1("Настройка центра поддержки","4")
# Сетевой брандмауэр
Func1("Настройка центра поддержки","5")
# Защита от вирусов
Func1("Настройка центра поддержки","6")
# Архивация Windows
Func1("Настройка центра поддержки","7")
# Проверка на наличие обновлений
Func1("Настройка центра поддержки","8")
# Устранение неполадок Windows
Func1("Настройка центра поддержки","9")
ControlFocus ( "Настройка центра поддержки", "", "[CLASS:Button; INSTANCE:10]" )
ControlClick ( "Настройка центра поддержки", "ОК", "Button10" )
While WinExists ( "Центр поддержки", "" )
WinClose ( "Центр поддержки", "" )
Sleep ( 1000 )
WEnd
Func Func1($hWnd, $inx)
ControlFocus ($hWnd, '', '[CLASS:Button; INSTANCE: ' & $inx & ']' )
If ControlCommand($hWnd, '', 'Button' & $inx, 'IsChecked') Then
ControlClick($hWnd, '', 'Button' & $inx)
Sleep(1000)
EndIf
EndFunc
Если служба wscsvc не запущена , если служба wscsvc не работает , а везде отчиталось , что служба wscsvc запущена , что служба wscsvc работает - то галочки / птички будут неактивные / затемненные и невозможно будет снять галочки / птички
то мне из всего этого бардака=барахла , хочется только статусы , только три слова
STOPPED
RUNNING
PAUSED »
Можно еще больше сократить, например, до RUNNING:
sc query "ServiceName" | find "RUNNING"
Windows Services from command line & Findstr: the Windows’ “grep” (https://dimasite.wordpress.com/tag/windows-grep/)
может еще есть какие-то методы , я был бы очень благодарен »
Старый Net start:
net start | find "Service Name"
PowerShell (https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-service?view=powershell-5.1):
Get-Service -name 'ServiceName'
Wmic:
call wmic /locale:ms_409 service where (name="wsearch") get state /value | findstr State=Running
if %ErrorLevel% EQU 0 (
echo Running
) else (
echo Not running
)
SharkyEXE
24-12-2017, 12:45
Казбек
Тема про AUTOIT , можете мне , пожалуйста , все Ваши способы в один файл test.au3 на языке AUTOIT написать ?
Спасибо.
SharkyEXE, одно слово: Wbem.
AutoItSetOption("MustDeclareVars", 1)
Local $sServiceName = "wscsvc"
Local $oSWbemLocator = ObjCreate("WbemScripting.SWbemLocator")
Local $oSWbemServicesEx = $oSWbemLocator.ConnectServer(".", "root\cimv2")
Local $oSWbemObjectEx = $oSWbemServicesEx.Get("Win32_Service.Name='" & $sServiceName & "'")
If $oSWbemObjectEx.State <> "Running" Then
If $oSWbemObjectEx.StartMode <> "Disabled" Then
If $oSWbemObjectEx.StartService() = 0 Then
ConsoleWrite("Service [" & $sServiceName & "] start successfully." & @CRLF)
Else
ConsoleWrite("Can't start service [" & $sServiceName & "]." & @CRLF)
EndIf
Else
ConsoleWrite("Service [" & $sServiceName & "] is disabled." & @CRLF)
EndIf
Else
ConsoleWrite("Service [" & $sServiceName & "] already running." & @CRLF)
EndIf
Exit(0)
SharkyEXE
24-12-2017, 21:35
Iska
Просьба 1
1) Для расширенной работы ( чтобы больше к этому вопросу лично мне не возвращаться ) вместо
Local $sServiceName = "wscsvc"
прописал
Local $sServiceName = "Winmgmt"
2) Делаю Приостановка службы Winmgmt = Инструментарий управления Windows
3) Запускаю Ваш код
4) Ни ответа , ни привета
5) Пожалуйста , просьба добавить строки на предмет статуса службы Приостановлено = PAUSED https://cloud.mail.ru/public/FsMR/S2o85Cs8n
Просьба 2
А можете , пожалуйста , это все тынц (http://forum.oszone.net/post-2786518-9.html) облагородить на язык Autoit
Я про что - это все тынц (http://forum.oszone.net/post-2786518-9.html) + Ваш способ (http://forum.oszone.net/post-2786567-11.html) помещаем в один autoit файл и делаем глобальную проверку:
1) если
sc query "ServiceName" | find "RUNNING"
2) если
net start | find "Service Name"
3) если
Get-Service -name 'ServiceName'
4) если
call wmic /locale:ms_409 service where (name="wsearch") get state /value | findstr State=Running
if %ErrorLevel% EQU 0 (
echo Running
) else (
echo Not running
)
5) если ( Ваш способ (http://forum.oszone.net/post-2786567-11.html) )
6) то далее пойдут строки моего скрипта (http://forum.oszone.net/post-2786514-8.html)
7) иначе - запуск службы Вашим способом (http://forum.oszone.net/post-2786567-11.html) и далее снова 5ть проверок
Если по короче - если 5ть проверок дают служба как запущена , если 5ть проверок дают служба как работает - то далее пойдут строки моего скрипта (http://forum.oszone.net/post-2786514-8.html)
Иначе - запуск службы Вашим способом (http://forum.oszone.net/post-2786567-11.html) и далее снова 5ть проверок
Один раз работка и на свю жизнь , зато 200% уверенность , что служба работает , что служба запущена
1) Для расширенной работы ( чтобы больше к этому вопросу лично мне не возвращаться ) вместо
Local $sServiceName = "wscsvc"
прописал
Local $sServiceName = "Winmgmt" »
У меня, видимо, совсем плохо с глазами стало, поскольку с утра было так:
Есть служба wscsvc ( Центр обеспечения безопасности )
Хочется запускать службу wscsvc с интервалом 1 секунда , пока состояние службы wscsvc не станет как Работает
Как только состояние службы wscsvc станет Работает - завершить работу скрипта
Реализации хочется чем проще тем лучше - хотелось при помощи sc query "wscsvc" »Определитесь.
2) Делаю Приостановка службы Winmgmt = Инструментарий управления Windows
3) Запускаю Ваш код
4) Ни ответа , ни привета »
SharkyEXE, есть существенная разница между понятиями запустить службу (StartService) и возобновить её работу (ResumeService). Ранее Вы писали:
Хочется запускать службу wscsvc »
Теперь пишете про:
2) Делаю Приостановка службы Winmgmt = Инструментарий управления Windows »
это разные вещи, которые делаются разными методами Wbem. Определитесь.
Но дело даже не в том. В данном конкретном случае было бы странно ожидать иного: Вы приостанавливаете работу той самой службы, которая как раз и отвечает за работоспособность Wbem.
Если по короче - если 5ть проверок дают служба как запущена , если 5ть проверок дают служба как работает… »
Я, конечно, не могу Вам запретить заниматься … в извращённой форме. Но в роли известной феи я выступать не хочу.
SharkyEXE
24-12-2017, 23:24
Iska
Здравствуйте.
1) Ваш скрипт , если служба Приостановлена - никогда не запустит такую службу
2) Почему привел пример с Приостановкой службы Winmgmt - потому что служба wscsvc не Приостанавливается
Приведу другой пример с Приостановкой службы LanmanWorkstation = Рабочая станция https://cloud.mail.ru/public/CUtx/C5ymz7zA3
Если по короче , куда-то в Ваш скрипт мне бы хотелось , что Вы добавили типа таких строк
If $oSWbemObjectEx.StartMode <> "Paused" Then
{запустить службу}
3) А я просто попросил при Вашем желании свести все в один файл , этот файл останется на всю жизнь для всех , кому нужно - тот и будет для себя использовать любую из 5ти проверок
А мне 5ти проверок хватит , это же не сложно для тех , кто понимает , как написать , однако это большая помощь тем , кто обращается за помощью.
Я никого и никогда не считал , не считаю и не буду считать, когда я обращаюсь за помощью , никакой феей и прочим , мне просто хочется помощи без надсмешек над тем , кто мне хочет помочь
Спасибо.
1) Ваш скрипт , если служба Приостановлена - никогда не запустит такую службу »
Именно так. Поскольку об этом не было разговора в ТЗ.
2) Почему привел пример с Приостановкой службы Winmgmt - потому что служба wscsvc не Приостанавливается »
Именно так:
C:\Мои проекты\0139>wmic.exe service where "Name = 'wscsvc'" get AcceptPause
AcceptPause
FALSE
Выбранный Вами пример оказался неудачным, но ладно, разобрались.
3) А я просто попросил при Вашем желании свести все в один файл , этот файл останется на всю жизнь для всех , кому нужно - тот и будет для себя использовать любую из 5ти проверок »
Хватит и одной.
Но мы так и не определились с конечной целью. Что в итоге Вам нужно — получить работающую службу из любого состояния? А если она вообще — disabled, отключена?
SharkyEXE
25-12-2017, 00:04
Именно так. Поскольку об этом не было разговора в ТЗ »
Я виноват , признаю , что от качественно написать , что хочется , будет и результат
Что в итоге Вам нужно — получить работающую службу из любого состояния? »
Ага. Только , повторюсь , на самом деле работающую службу , а не чего-то где-то отчиталось , что служба работает , что служба запущена , а на самом деле служба не успела запуститься , служба еще не работает , а мой скрипт уже пошел работаь , вот поэтому и 5ть проверок мне хочется , точнее мне 5ть проверок - это 100,1% гарантия работы моего скрипта , другим людям - выбор , какой им из 5ти примеров проверки запуска службы использовать , что плохого , что не только для меня , но и для других ученье
А если она вообще — disabled, отключена? »
Согласен , возможно и такое. Тогда службу перевести в Ручной запуск ( только не Автоматически ) и далее запуск
PS. Пожалуйста , я Вас очень прошу , реализуйте все это тынц (http://forum.oszone.net/post-2786518-9.html) на Autoit , вряд ли еще есть какие-то способы , разве что на vbs или с привлечением дополнительно подключаемых au3 сервисов , типа #include Services.au3 , но 5ть способов уже за глаза , тем более все 5ть способов , в том числе и Ваш - все штатными средствами Windows , что еще гарантирует надежность
Спасибо.
Только , повторюсь , на самом деле работающую службу »
SharkyEXE, нет никаких способов гарантированно получить работающую службу. По многим причинам.
Примерно так:
AutoItSetOption("MustDeclareVars", 1)
If RunService("wscsvc") Then
ConsoleWrite("Service running." & @CRLF)
;
; Place your code here
;
Else
ConsoleWrite("Service not running." & @CRLF)
EndIf
Exit(0)
Func RunService($sServiceName)
Local $oSWbemLocator = ObjCreate("WbemScripting.SWbemLocator")
Local $oSWbemServicesEx = $oSWbemLocator.ConnectServer(".", "root\cimv2")
Local $oSWbemObjectEx = $oSWbemServicesEx.Get("Win32_Service.Name='" & $sServiceName & "'")
Local $iTimer = 0
Local $bDone = False
Do
Switch $oSWbemObjectEx.State
Case "Running"
ConsoleWrite("Service [" & $sServiceName & "] already running." & @CRLF)
Return True
Case "Stopped"
If $oSWbemObjectEx.StartMode = "Disabled" Then
If Not $oSWbemObjectEx.ChangeStartMode("Manual") = 0 Then
ConsoleWrite("Can't change start mode of service [" & $sServiceName & "] to [Manual]." & @CRLF)
Return False
EndIf
EndIf
If $oSWbemObjectEx.StartService() = 0 Then
ConsoleWrite("Service [" & $sServiceName & "] start successfully." & @CRLF)
Return True
Else
ConsoleWrite("Can't start service [" & $sServiceName & "]." & @CRLF)
Return False
EndIf
Case "Paused"
If $oSWbemObjectEx.ResumeService() = 0 Then
ConsoleWrite("Service [" & $sServiceName & "] resume successfully." & @CRLF)
Return True
Else
ConsoleWrite("Can't resume service [" & $sServiceName & "]." & @CRLF)
Return False
EndIf
Case "Unknown"
ConsoleWrite("Service [" & $sServiceName & "] is unknown state." & @CRLF)
Return False
Case "Start Pending"
Case "Stop Pending"
Case "Continue Pending"
Case "Pause Pending"
EndSwitch
Sleep(100)
$iTimer = $iTimer + 100
Until $iTimer > 60 * 100 * 10
ConsoleWrite("Timer out for pending operation for service [" & $sServiceName & "]." & @CRLF)
Return False
EndFunc
SharkyEXE
25-12-2017, 01:14
нет никаких способов гарантированно получить работающую службу »
Есть! Если получены 5ть ответов , что служба запущена , что служба работает , разными штатными средствами Windows , разными языками, без привлечения сторонних , неизвестно каких утилит и программ , то вероятность 100,1% , что служба работает , что служба запущена :)
SharkyEXE, более чем достаточно одного-единственного способа, чтобы иметь уверенность, что служба работает. Я про другое: невозможно гарантировать, что службу удастся перевести в состояние «Работает».
SharkyEXE
25-12-2017, 01:35
Iska
Опять Вы меня не понимаете , извините меня , пожалуйста.
Если 5ть способов ( 4ре этих (http://forum.oszone.net/post-2786518-9.html) + 1 Ваш ) возвращают что служба работает - тут ничего не поделаешь , что верить можно 100%
1) Мне не требуется 5тью способами перевести службу из Остановлено -> в Работает
2) Мне не требуется 5тью способами перевести службу из Приостановлено -> в Работает
3) Мне не требуется 5тью способами перевести службу из Отключена -> в Ручную -> в Работает
Мне хочется 5ть способов проверки , что служба работает и не более
Мне хочется , чтобы все 5ть способов проверки , что служба работает , мне возвращали одно и тоже - RUNNING , после чего я буду запускать мой скрипт
То есть Ваш скрипт - основной , а дополнительно мне бы хотелось прикрутить тынц (http://forum.oszone.net/post-2786518-9.html)
Итого : отрабатывает Ваш код + дополнительно 4ре способа (http://forum.oszone.net/post-2786518-9.html) возвращают RUNNING - после чего работает мой скрипт
Что здесь плохого-то?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.