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

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

Ветеран


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

Профиль | Отправить 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