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

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

Ветеран


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

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


C0D3X, у Вас нет задачи. У Вас есть придуманное якобы решение, которое ни разу не решает реальной задачи.

Что на самом деле происходит со службой? Как определяете, что она «зависает»? Что сообщает ОС о «зависшей» службе? Что в журналах событий? Что в логах самой службы? Каково состояние службы в этот момент? Вот какие вопросы надо задавать, и какие задачи решать, вместо того, чтобы тупо периодически перезапускать службу в процессе работы. Это не решение, это извращение. Попытка закрыть глаза на реально существующую проблему.

Я, конечно, нарисую Вашу хотелку, но проверить её работоспособность банально не смогу, поскольку у меня никогда такой проблемы с «FileZilla Server» не возникало.
Скрытый текст
Код: Выделить весь код
Option Explicit

Dim strServiceName

Dim objSWbemServicesEx
Dim objSWbemObjectEx


strServiceName = "FileZilla Server"


Set objSWbemServicesEx = WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2")
Set objSWbemObjectEx = objSWbemServicesEx.Get("Win32_Service.Name='" & strServiceName & "'")

If objSWbemObjectEx.Started Then
	If objSWbemObjectEx.AcceptStop Then
		If objSWbemObjectEx.StopService() = 0 Then
			Do
				WScript.Sleep 100
				
				Set objSWbemObjectEx = objSWbemServicesEx.Get("Win32_Service.Name='" & strServiceName & "'")
			Loop While objSWbemObjectEx.Started
			
			StartService
		Else
			WScript.Echo "Can't stop service [" & strServiceName & "]."
			
			With objSWbemServicesEx.Get("Win32_Process.Handle='" & CStr(objSWbemObjectEx.ProcessID) & "'")
				If .Terminate() = 0 Then
					StartService
				Else
					WScript.Echo "Can't terminate process of service [" & strServiceName & "]."
				End If
			End With
		End If
	Else
		WScript.Echo "Service [" & strServiceName & "] can't be stopped."
	End If
Else
	StartService
End If

Set objSWbemObjectEx   = Nothing
Set objSWbemServicesEx = Nothing

WScript.Quit 0
'=============================================================================

'=============================================================================
Sub StartService()
	If objSWbemObjectEx.StartService() = 0 Then
		Do
			WScript.Sleep 100
			
			Set objSWbemObjectEx = objSWbemServicesEx.Get("Win32_Service.Name='" & strServiceName & "'")
		Loop Until objSWbemObjectEx.Started
	Else
		WScript.Echo "Can't start service [" & strServiceName & "]."
	End If
End Sub
'=============================================================================
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:47, 21-02-2015 | #26