Имя пользователя:
Пароль:
 

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

Ветеран


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

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


bombording, попробуйте так (запускать под «cscript.exe»):
Код: Выделить весь код
Option Explicit

Dim strProcessName
Dim strServiceNamePrimary
Dim strServiceNameSecondary

Dim strComputer

Dim objSWbemLocator
Dim objSWbemServicesEx
Dim objSWbemEventSource

Dim objSWbemObjectEx_ServicePrimary
Dim objSWbemObjectEx_ServiceSecondary

Dim collSWbemObjectSet


strProcessName          = "base.exe"                           ' "notepad.exe"
strServiceNamePrimary   = "Pervasive.SQL 2000 (transactional)" ' "aspnet_state"
strServiceNameSecondary = "Pervasive.SQL 2000 (relational)"    ' "SwPrv"


strComputer = "."

Set objSWbemLocator    = WScript.CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServicesEx = objSWbemLocator.ConnectServer(strComputer, "root\cimv2")
Set collSWbemObjectSet = objSWbemServicesEx.ExecQuery("SELECT Name FROM Win32_Service WHERE Name = '" & strServiceNamePrimary & "'")

If collSWbemObjectSet.Count = 1 Then
	Set objSWbemObjectEx_ServicePrimary   = objSWbemServicesEx.Get("Win32_Service.Name='" & strServiceNamePrimary   & "'")
	Set objSWbemObjectEx_ServiceSecondary = objSWbemServicesEx.Get("Win32_Service.Name='" & strServiceNameSecondary & "'")
	
	WScript.StdOut.Write "Скрипт ожидает выполнения условий для начала работы..."
	
	Do
		objSWbemObjectEx_ServicePrimary.Refresh_
		objSWbemObjectEx_ServiceSecondary.Refresh_
		
		Set collSWbemObjectSet = objSWbemServicesEx.ExecQuery("SELECT Name FROM Win32_Process WHERE Name = '" & strProcessName & "'")
		
		If objSWbemObjectEx_ServicePrimary.Started And _
			objSWbemObjectEx_ServiceSecondary.Started And _
			collSWbemObjectSet.Count > 0 Then
			
			WScript.StdOut.WriteLine " Условия выполнены"
			
			Exit Do
		Else
			WScript.Sleep 100
		End If
	Loop
	
	WScript.StdOut.WriteLine "Скрипт работает"
	
	Set objSWbemObjectEx_ServicePrimary   = objSWbemServicesEx.Get("Win32_Service.Name='" & strServiceNamePrimary   & "'")
	Set objSWbemObjectEx_ServiceSecondary = objSWbemServicesEx.Get("Win32_Service.Name='" & strServiceNameSecondary & "'")
	
	Set objSWbemEventSource = objSWbemServicesEx.ExecNotificationQuery( _
		"SELECT * FROM __InstanceDeletionEvent " & _
		"WITHIN 1 WHERE TargetInstance ISA 'Win32_Process' AND " & _
		"TargetInstance.Name = '" & strProcessName & "'")
	
	Do
		With objSWbemEventSource.NextEvent.TargetInstance
			WScript.StdOut.WriteLine "Процесс [" & .Name & "] (PID: " & CStr(.ProcessID) & ") был остановлен"
		End With
		
		With objSWbemObjectEx_ServicePrimary
			WScript.StdOut.WriteLine "Служба [" & .Name & "] (PID: " & CStr(.ProcessId) & ")"
			
			.Refresh_
			
			If .Started Then
				WScript.StdOut.Write "  Служба останавливается"
				
				If .StopService() = 0 Then
					Do
						WScript.Sleep 100
						WScript.StdOut.Write "."
						
						.Refresh_
					Loop While .Started
					
					WScript.StdOut.WriteLine
				Else
					WScript.StdOut.WriteLine "Невозможно остановить службу"
				End If
			End If
			
			WScript.StdOut.Write "  Служба запускается"
			
			If .StartService() = 0 Then
				Do
					WScript.Sleep 100
					WScript.StdOut.Write "."
					
					.Refresh_
				Loop Until .Started
				
				WScript.StdOut.WriteLine
			Else
				WScript.StdOut.WriteLine "Невозможно запустить службу"
			End If
		End With
	Loop
Else
	WScript.StdOut.WriteLine "Служба [" & strServiceNamePrimary & "] не установлена"
End If

WScript.Quit 0
читать дальше »

В комментариях скрипта — то, на чём я тренировался. Примерный вывод скрипта:
Цитата:
Код: Выделить весь код
Скрипт ожидает выполнения условий для начала работы... Условия выполнены
Скрипт работает
Процесс [notepad.exe] (PID: 22884) был остановлен
Служба [aspnet_state] (PID: 18568)
  Служба останавливается............................
  Служба запускается.
Процесс [notepad.exe] (PID: 22988) был остановлен
Служба [aspnet_state] (PID: 22940)
  Служба останавливается..................
  Служба запускается.
«Блокнот» я, разумеется, запускал сам, имитируя службу «Pervasive.SQL 2000 (transactional)».
Это сообщение посчитали полезным следующие участники:

Отправлено: 05:07, 29-10-2011 | #15