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

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

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

Аватара для TERMINAL

Ветеран


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

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


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

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


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

 

Ветеран


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

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


Цитата Iska:
Поэтому я его и не чищу. »
Извините меня , пожалуйста , это полностью Ваше право , просто иного хочется помощи.

А вот можно вторую версию

Код: Выделить весь код
1. Запустить службу.
2. Если удалось — отрабатывает Ваш код.
3. Режим запуска отключено службу.
4. Если удалось — остановить службу.
Просто в первой версии:
1) Может не остановиться служба
2) Тогда режим запуска службы не станет отключено
3) Тогда после перезагрузки ПК служба будет запускаться

А во второй версии:
1) Сразу после отработки моего кода служба Отключается
2) Скорее всего успешно , тогда будет остановка службы
3) Самое главное , после перезагрузки служба будет отключена

Спасибо.

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



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

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


Ветеран


Contributor


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

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


Цитата SharkyEXE:
1) Может не остановиться служба
2) Тогда режим запуска службы не станет отключено
3) Тогда после перезагрузки ПК служба будет запускаться »
Тут Вы, конечно, правы. Какой-то зависимости типа запуска от текущего состояния службы нет. Можно просто вынести смену типа запуска вовне условия:
Скрытый текст
Код: Выделить весь код
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 Not $oSWbemObjectEx.ChangeStartMode("Disabled") = 0 Then
		ConsoleWrite("Can't change start mode of service [" & $sServiceName & "] to [Disabled]." & @CRLF)
	EndIf
	
	If $oSWbemObjectEx.StopService() = 0 Then
		ConsoleWrite("Service [" & $sServiceName & "] stopped successfully." & @CRLF)
	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
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:47, 31-12-2017 | #32


Ветеран


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

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


Iska

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

В последней версии хочется понять, распространяется или нет Таймер для Отключить службу и Остановить службу после отработки моего скрипта
Код: Выделить весь код
	If Not $oSWbemObjectEx.ChangeStartMode("Disabled") = 0 Then
		ConsoleWrite("Can't change start mode of service [" & $sServiceName & "] to [Disabled]." & @CRLF)
	EndIf
	
	If $oSWbemObjectEx.StopService() = 0 Then
		ConsoleWrite("Service [" & $sServiceName & "] stopped successfully." & @CRLF)
	Else
		ConsoleWrite("Can't stop service [" & $sServiceName & "]." & @CRLF)
	EndIf
Просто для Запуск службы и Смена типа службы перед отработкой моего скрипта Таймер есть, а почему Таймера нету для Отключить службу и Остановить службу после отработки моего скрипта?

Спасибо.

Последний раз редактировалось SharkyEXE, 03-01-2018 в 14:28.


Отправлено: 14:03, 03-01-2018 | #33


Ветеран


Contributor


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

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


Цитата SharkyEXE:
В последней версии »
Старайтесь указывать ссылку на сообщение. Ибо «в последней версии» для Вас и для меня могут сильно отличаться.

Цитата SharkyEXE:
Просто для Запуск службы и Смена типа службы перед отработкой моего скрипта Таймер есть, »
Два раза нет. Смотрите внимательнее.

Во-первых, не «Запуск службы и Смена типа службы перед отработкой»: в задачи функции RunService() входит запуск службы и возврат булевого значения — True, в случае, если сие удалось, и False — если не удалось.

Во-вторых, таймер отрабатывает только для случаев:
Код: Выделить весь код
			Case "Start Pending"
			Case "Stop Pending"
			Case "Continue Pending"
			Case "Pause Pending"
когда служба находится в процессе смены одного состояния на другое, и нужно подождать, когда служба перейдёт в то или иное стабильное состояние.

Цитата SharkyEXE:
а почему Таймера нету для Отключить службу и Остановить службу после отработки моего скрипта? »
Потому что а) нам известно текущее состояние службы, и б) см. «во-вторых» выше.

Отправлено: 14:29, 03-01-2018 | #34


Ветеран


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

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


Iska

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

1) Скрипт этот

2) Я про что - а разве когда Служба Работает и Служба надо Остановить после отработки моего скрипта, разве не надо после команды Остановить подождать - процесс смены одного состояния на другое

3) Я про что - а разве когда Тип запуска службы Вручную или Тип запуска службы Автоматически и ее надо Тип запуска службы Отключить после отработки моего скрипта, разве не надо после команды Отключить подождать - процесс смены одного состояния на другое

Отправлено: 14:55, 03-01-2018 | #35


Ветеран


Contributor


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

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


Цитата SharkyEXE:
разве когда служба Работает и ее надо Остановить после отработки моего скрипта, разве не надо после команды Остановить подождать - процесс смены одного состояния на другое »
А в чём смысл ожидания?

Цитата SharkyEXE:
разве когда служба Вручную или Автоматически и ее надо Отключить после отработки моего скрипта, разве не надо после команды Отключить подождать - процесс смены одного состояния на другое »
Я уже писал выше, что нет такой зависимости.

Отправлено: 15:01, 03-01-2018 | #36


Ветеран


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

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


Цитата Iska:
А в чём смысл ожидания? »
Если служба не сделается Остановить, подождать, пока служба не сделается Остановить

Просто как я понял для запуска службы, подождать используется

А почему для остановки подождать не нужно использовать?

Отправлено: 15:07, 03-01-2018 | #37


Ветеран


Contributor


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

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


Цитата SharkyEXE:
Если служба не сделается Остановить, подождать, пока служба не сделается Остановить »
1. Зачем ждать?
2. Предположим, она никогда не сделается «Остановить». Будем ждать вечно?

Цитата SharkyEXE:
А почему для остановки подождать не нужно использовать? »
Повторю ещё раз: зачем ждать?

Отправлено: 15:12, 03-01-2018 | #38


Ветеран


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

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


Iska

А можете простой пример работы Вашего таймера написать, типа Служба Остановлена, или служба Отключена и как работает Таймер?

Отправлено: 15:15, 03-01-2018 | #39


Ветеран


Contributor


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

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


Пример в коде чем не устраивает?

Отправлено: 17:50, 03-01-2018 | #40



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




 
Переход