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

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

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

Аватара для TERMINAL

Ветеран


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

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


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

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


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

 

Ветеран


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

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


SharkyEXE, я Вас вполне понимаю. Повторю: я не стану писать пять способов проверки того, что служба работает, если один-единственный способ уже даёт равнозначный гарантированный результат.
Скрытый текст
Код: Выделить весь код
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
	ConsoleWrite("Service [" & $sServiceName & "] running." & @CRLF)
	;
	; Place your code here
	;
Else
	ConsoleWrite("Service [" & $sServiceName & "] not running." & @CRLF)
EndIf

Exit(0)

P.S. Вы опять поменяли техзадание.

Цитата SharkyEXE:
Что здесь плохого-то? »
Смысла не вижу ни малейшего.
Это сообщение посчитали полезным следующие участники:

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



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

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


Ветеран


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

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


Цитата Iska:
P.S. Вы опять поменяли техзадание. »
Вы про что?
Предыдущий расширенный код работает как надо , проверено лично

Цитата Iska:
один-единственный способ»
Вы извините меня , пожалуйста , но это Вы можете быть в этом уверены , а я вот не могут быть уверенным , что один единственный способ это вот прям вот что прям служба работает

Чем же wbem 100,1% лучше wmic или Powershell или стандартной родной комманде sc query или старому Net start, что можно верить только wbem ?

Я уважаю Ваш труд , я вообще не понимаю , как Вы это делаете , но просто по одной проверке никакого вывода сделать нельзя

А вот когда 5ть способов проверки мне отвечают , что служба работает - вопросов нет

А у меня вот есть уверенность , что после проверки sc query "{название службы}" | find "RUNNING" можно запускать мой скрипт

И еще есть у меня уверенность , что после проверки PowerShell ( Get-Service -name '{название службы}' ) можно запускать мой скрипт

...

Эх , что ж мне так все тяжело даётся то...

PS. А можете хоть написать , как из остальных 4х способов отловить слово RUNNING , сделать из нее переменную и сравнивать
Код: Выделить весь код
If $Check1 = RUNNING Then
If $Check2 = RUNNING Then
If $Check3 = RUNNING Then
If $Check4 = RUNNING Then
If RunService("wscsvc") Then
	ConsoleWrite("Service running." & @CRLF)
	;
	; Place your code here
	;
Else
	ConsoleWrite("Service not running." & @CRLF)
EndIf

Exit(0)
...

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


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


Ветеран


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

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


Цитата SharkyEXE:
PS. А можете хоть написать , как из остальных 4х способов отловить слово RUNNING , сделать из нее переменную и сравнивать »
SharkyEXE, простите, просто не хочу.
Это сообщение посчитали полезным следующие участники:

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


Ветеран


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

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


Iska

Это Вы меня простите , что просто мне хочется один раз и на всю жизнь , чтобы больше к этому не возвращаться

А пока буду пользоваться Вашей расширенной версией , хотя , попробую потупить , может быть как-то где-то у меня поулчиться все-таки остальные 4ре способа проверки прикрутить

Просто обидно , почему меня не понимают , хотя я не программист , но чего-то в моих хотелках и пожеланиях есть тоже правильное

Еще раз спасибо!

Отправлено: 02:29, 25-12-2017 | #24


Ветеран


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

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


Iska

И еще : а можете , пожалуйста , написать мне команду применительно к Вашему примеру , чтобы мне сделать Служба = Отключено , просто в конце рыботы моего скрипта мне требуется сделать службу Отключено , мне служба больше не нужна , чтобы работала

Чтобы было так

Цитата:
If RunService("wscsvc") Then
ConsoleWrite("Service running." & @CRLF)
;
; Place your code here
;
{отключить службу}

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


Ветеран


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

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


Зачем отключать? Правильным будет запоминать исходное состояние службы и её состояние StartMode и возвращать их после отработки Вашего кода.
Это сообщение посчитали полезным следующие участники:

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


Ветеран


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

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


Цитата Iska:
Зачем отключать? »
А вот смотрите , кому день и ночь ставить обновления , ни могу не есть и не спать , лишь бы обновления установить , это про программистов на моей работе , а я до сих пор на Windows 7 SP0 ( откатился с SP1 ) сижу и меня все устраивает , ни одного вируса не поймал , стабильно усе.

Эта служба wscsvc у меня уже 3-4 года отключена и усе стабильно , ни единого глюка , синего экрана , зависания и прочего по причине отключения службы

Поэтому запуск службы wscsvc нужен только для моего скрипта , даже если служба wscsvc до запуска моего скрипта была как Автоматичекси + Рабоатет , после отработки моего скрипта эта служба мне больше никогда в жизни не потребуется , я уверен на все 100,1% , потому что 3-4 года эта служба у меня Отключена и я доволен - меньше работающих служб = быстрее работает компьютер

Поэтому я Вас очень прошу , сделайте тогда:
Отключить Службу
Запомнить это состояние
Сделать службу вручную
Запустить службу
Отработка моего скрипта
Вернуть состояние службы Отключено после отработки моего скрипта

Отправлено: 12:33, 25-12-2017 | #27


Ветеран


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

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


Iska

Время идет , проблема стоит , мне хочется решения моей проблемы , написал самостоятельно по Вашему примеру Остановка и Отключить службу , все работает , только после Остановка и Отключение службы скрипт выполняется , похоже там таймер чего-то проверяет
Скрытый текст
Код: Выделить весь код
StopAndDisabledService("wscsvc")

AutoItSetOption("MustDeclareVars", 1)

Func StopAndDisabledService($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
				$oSWbemObjectEx.StopService()
				$oSWbemObjectEx.ChangeStartMode("Disabled")
		Sleep(100)
		$iTimer = $iTimer + 100
	Until $iTimer > 60 * 100 * 10

EndFunc
Пожалуйста , поправьте мой скрипт с учетом таймера , не тупо удалить таймер - если Вы включили таймер , значит он нужен , а приспособить мои две строки к Вашему таймеру

Повторюсь , время идет , проблема стоит , мне хочется решения моей проблемы

Спасибо.

Отправлено: 09:41, 26-12-2017 | #28


Ветеран


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

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


Iska

Пожалуйста , очистите Ваш почтовый ящик , а то я Вам не могу напистаь сообщение


Спасибо.

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


Ветеран


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

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


Цитата SharkyEXE:
очистите Ваш почтовый ящик , а то я Вам не могу напистаь сообщение »
Поэтому я его и не чищу.

Цитата SharkyEXE:
Поэтому я Вас очень прошу , сделайте тогда:
Отключить Службу
Запомнить это состояние
Сделать службу вручную
Запустить службу
Отработка моего скрипта
Вернуть состояние службы Отключено после отработки моего скрипта »
Вы описали крайне нелогичный алгоритм. Я сделаю иначе:
  1. Запустить службу.
  2. Если удалось — отрабатывает Ваш код.
  3. Остановить службу.
  4. Если удалось — сменить режим запуска на отключено.

Не проверялось:
Скрытый текст
Код: Выделить весь код
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 RunService() Then
	ConsoleWrite("Service running." & @CRLF)
	
	;
	; Place your code here
	;
	
	If $oSWbemObjectEx.StopService() = 0 Then
		ConsoleWrite("Service [" & $sServiceName & "] stopped successfully." & @CRLF)
		
		If Not $oSWbemObjectEx.ChangeStartMode("Disabled") = 0 Then
			ConsoleWrite("Can't change start mode of service [" & $sServiceName & "] to [Disabled]." & @CRLF)
		EndIf
	Else
		ConsoleWrite("Can't stop service [" & $sServiceName & "]." & @CRLF)
	EndIf
Else
	ConsoleWrite("Service not running." & @CRLF)
EndIf

Exit(0)

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

Отправлено: 07:28, 28-12-2017 | #30



Компьютерный форум 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




 
Переход