Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Остановка и запуск службы

Ответить
Настройки темы
[решено] Остановка и запуск службы

Аватара для TERMINAL

Ветеран


Сообщения: 768
Благодарности: 28

Профиль | Отправить PM | Цитировать


Добрый день !
Подскажите плз, какими командами можно останавливать и запускать службу ?

-------
Автоматизация прежде всего....


Отправлено: 19:23, 02-03-2011

 

Ветеран


Contributor


Сообщения: 24000
Благодарности: 6971

Профиль | Отправить PM | Цитировать


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)
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:59, 24-12-2017 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 838
Благодарности: 86

Профиль | Отправить PM | Цитировать


Iska

Просьба 1

1) Для расширенной работы ( чтобы больше к этому вопросу лично мне не возвращаться ) вместо

Local $sServiceName = "wscsvc"

прописал

Local $sServiceName = "Winmgmt"

2) Делаю Приостановка службы Winmgmt = Инструментарий управления Windows

3) Запускаю Ваш код

4) Ни ответа , ни привета

5) Пожалуйста , просьба добавить строки на предмет статуса службы Приостановлено = PAUSED https://cloud.mail.ru/public/FsMR/S2o85Cs8n

Просьба 2

А можете , пожалуйста , это все тынц облагородить на язык Autoit

Я про что - это все тынц + Ваш способ помещаем в один 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) если ( Ваш способ )
6) то далее пойдут строки моего скрипта
7) иначе - запуск службы Вашим способом и далее снова 5ть проверок

Если по короче - если 5ть проверок дают служба как запущена , если 5ть проверок дают служба как работает - то далее пойдут строки моего скрипта
Иначе - запуск службы Вашим способом и далее снова 5ть проверок

Один раз работка и на свю жизнь , зато 200% уверенность , что служба работает , что служба запущена

Последний раз редактировалось SharkyEXE, 24-12-2017 в 23:00.


Отправлено: 21:35, 24-12-2017 | #12


Ветеран


Contributor


Сообщения: 24000
Благодарности: 6971

Профиль | Отправить PM | Цитировать


Цитата SharkyEXE:
1) Для расширенной работы ( чтобы больше к этому вопросу лично мне не возвращаться ) вместо
Local $sServiceName = "wscsvc"
прописал
Local $sServiceName = "Winmgmt" »
У меня, видимо, совсем плохо с глазами стало, поскольку с утра было так:
Скрытый текст
Цитата SharkyEXE:
Есть служба wscsvc ( Центр обеспечения безопасности )
Хочется запускать службу wscsvc с интервалом 1 секунда , пока состояние службы wscsvc не станет как Работает
Как только состояние службы wscsvc станет Работает - завершить работу скрипта
Реализации хочется чем проще тем лучше - хотелось при помощи sc query "wscsvc" »
Определитесь.

Цитата SharkyEXE:
2) Делаю Приостановка службы Winmgmt = Инструментарий управления Windows
3) Запускаю Ваш код
4) Ни ответа , ни привета »
SharkyEXE, есть существенная разница между понятиями запустить службу (StartService) и возобновить её работу (ResumeService). Ранее Вы писали:
Цитата SharkyEXE:
Хочется запускать службу wscsvc »
Теперь пишете про:
Цитата SharkyEXE:
2) Делаю Приостановка службы Winmgmt = Инструментарий управления Windows »
это разные вещи, которые делаются разными методами Wbem. Определитесь.

Но дело даже не в том. В данном конкретном случае было бы странно ожидать иного: Вы приостанавливаете работу той самой службы, которая как раз и отвечает за работоспособность Wbem.

Цитата SharkyEXE:
Если по короче - если 5ть проверок дают служба как запущена , если 5ть проверок дают служба как работает… »
Я, конечно, не могу Вам запретить заниматься … в извращённой форме. Но в роли известной феи я выступать не хочу.
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:14, 24-12-2017 | #13


Ветеран


Сообщения: 838
Благодарности: 86

Профиль | Отправить PM | Цитировать


Iska

Здравствуйте.

1) Ваш скрипт , если служба Приостановлена - никогда не запустит такую службу

2) Почему привел пример с Приостановкой службы Winmgmt - потому что служба wscsvc не Приостанавливается

Приведу другой пример с Приостановкой службы LanmanWorkstation = Рабочая станция https://cloud.mail.ru/public/CUtx/C5ymz7zA3

Если по короче , куда-то в Ваш скрипт мне бы хотелось , что Вы добавили типа таких строк

Код: Выделить весь код
If $oSWbemObjectEx.StartMode <> "Paused" Then
{запустить службу}
3) А я просто попросил при Вашем желании свести все в один файл , этот файл останется на всю жизнь для всех , кому нужно - тот и будет для себя использовать любую из 5ти проверок

А мне 5ти проверок хватит , это же не сложно для тех , кто понимает , как написать , однако это большая помощь тем , кто обращается за помощью.

Я никого и никогда не считал , не считаю и не буду считать, когда я обращаюсь за помощью , никакой феей и прочим , мне просто хочется помощи без надсмешек над тем , кто мне хочет помочь

Спасибо.

Последний раз редактировалось SharkyEXE, 24-12-2017 в 23:38.


Отправлено: 23:24, 24-12-2017 | #14


Ветеран


Contributor


Сообщения: 24000
Благодарности: 6971

Профиль | Отправить PM | Цитировать


Цитата SharkyEXE:
1) Ваш скрипт , если служба Приостановлена - никогда не запустит такую службу »
Именно так. Поскольку об этом не было разговора в ТЗ.

Цитата SharkyEXE:
2) Почему привел пример с Приостановкой службы Winmgmt - потому что служба wscsvc не Приостанавливается »
Именно так:
Код: Выделить весь код
C:\Мои проекты\0139>wmic.exe service where "Name = 'wscsvc'" get AcceptPause
AcceptPause
FALSE
Выбранный Вами пример оказался неудачным, но ладно, разобрались.

Цитата SharkyEXE:
3) А я просто попросил при Вашем желании свести все в один файл , этот файл останется на всю жизнь для всех , кому нужно - тот и будет для себя использовать любую из 5ти проверок »
Хватит и одной.

Но мы так и не определились с конечной целью. Что в итоге Вам нужно — получить работающую службу из любого состояния? А если она вообще — disabled, отключена?
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:42, 24-12-2017 | #15


Ветеран


Сообщения: 838
Благодарности: 86

Профиль | Отправить PM | Цитировать


Цитата Iska:
Именно так. Поскольку об этом не было разговора в ТЗ »
Я виноват , признаю , что от качественно написать , что хочется , будет и результат

Цитата Iska:
Что в итоге Вам нужно — получить работающую службу из любого состояния? »
Ага. Только , повторюсь , на самом деле работающую службу , а не чего-то где-то отчиталось , что служба работает , что служба запущена , а на самом деле служба не успела запуститься , служба еще не работает , а мой скрипт уже пошел работаь , вот поэтому и 5ть проверок мне хочется , точнее мне 5ть проверок - это 100,1% гарантия работы моего скрипта , другим людям - выбор , какой им из 5ти примеров проверки запуска службы использовать , что плохого , что не только для меня , но и для других ученье

Цитата Iska:
А если она вообще — disabled, отключена? »
Согласен , возможно и такое. Тогда службу перевести в Ручной запуск ( только не Автоматически ) и далее запуск

PS. Пожалуйста , я Вас очень прошу , реализуйте все это тынц на Autoit , вряд ли еще есть какие-то способы , разве что на vbs или с привлечением дополнительно подключаемых au3 сервисов , типа #include Services.au3 , но 5ть способов уже за глаза , тем более все 5ть способов , в том числе и Ваш - все штатными средствами Windows , что еще гарантирует надежность

Спасибо.

Последний раз редактировалось SharkyEXE, 25-12-2017 в 00:11.


Отправлено: 00:04, 25-12-2017 | #16


Ветеран


Contributor


Сообщения: 24000
Благодарности: 6971

Профиль | Отправить PM | Цитировать


Цитата SharkyEXE:
Только , повторюсь , на самом деле работающую службу »
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
Это сообщение посчитали полезным следующие участники:

Отправлено: 01:09, 25-12-2017 | #17


Ветеран


Сообщения: 838
Благодарности: 86

Профиль | Отправить PM | Цитировать


Цитата Iska:
нет никаких способов гарантированно получить работающую службу »
Есть! Если получены 5ть ответов , что служба запущена , что служба работает , разными штатными средствами Windows , разными языками, без привлечения сторонних , неизвестно каких утилит и программ , то вероятность 100,1% , что служба работает , что служба запущена

Последний раз редактировалось SharkyEXE, 25-12-2017 в 01:20.


Отправлено: 01:14, 25-12-2017 | #18


Ветеран


Contributor


Сообщения: 24000
Благодарности: 6971

Профиль | Отправить PM | Цитировать


SharkyEXE, более чем достаточно одного-единственного способа, чтобы иметь уверенность, что служба работает. Я про другое: невозможно гарантировать, что службу удастся перевести в состояние «Работает».
Это сообщение посчитали полезным следующие участники:

Отправлено: 01:26, 25-12-2017 | #19


Ветеран


Сообщения: 838
Благодарности: 86

Профиль | Отправить PM | Цитировать


Iska

Опять Вы меня не понимаете , извините меня , пожалуйста.

Если 5ть способов ( 4ре этих + 1 Ваш ) возвращают что служба работает - тут ничего не поделаешь , что верить можно 100%

1) Мне не требуется 5тью способами перевести службу из Остановлено -> в Работает
2) Мне не требуется 5тью способами перевести службу из Приостановлено -> в Работает
3) Мне не требуется 5тью способами перевести службу из Отключена -> в Ручную -> в Работает

Мне хочется 5ть способов проверки , что служба работает и не более

Мне хочется , чтобы все 5ть способов проверки , что служба работает , мне возвращали одно и тоже - RUNNING , после чего я буду запускать мой скрипт

То есть Ваш скрипт - основной , а дополнительно мне бы хотелось прикрутить тынц

Итого : отрабатывает Ваш код + дополнительно 4ре способа возвращают RUNNING - после чего работает мой скрипт

Что здесь плохого-то?

Последний раз редактировалось SharkyEXE, 25-12-2017 в 01:43.


Отправлено: 01:35, 25-12-2017 | #20



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Остановка и запуск службы

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Остановка службы. Just4Fun Microsoft Windows NT/2000/2003 19 17-05-2013 14:27
Разное - Частая остановка службы VbInt Microsoft Windows Vista 6 18-02-2009 16:21
Службы - Внезапная остановка Службы диспетчера печати aminiy Microsoft Windows Vista 10 18-07-2008 17:55
Remote Procedure Call (RPC) непредвиденная остановка службы ppv Microsoft Windows NT/2000/2003 15 15-02-2007 23:58
непредвиденная остановка службы Isass.exe Trei ISA Server / Microsoft Forefront TMG 3 24-08-2005 08:27




 
Переход