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

Показать сообщение отдельно

Ветеран


Сообщения: 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