#RequireAdmin Func _Services_Running($Dienst) ;Startet ein Service Local $errCode, $objWM, $co $objWMI = ObjGet('winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2') $co = $objWMI.ExecQuery('Select * from Win32_Service WHERE name = "' & $Dienst & '"') If Not IsObj($co) Then Return SetError(1, 1, -1) For $ob In $co Return _Service_Error($ob.StartService()) Next EndFunc ;==>_Services_Running Func _Services_Stopp($Dienst) ;Beendet ein Service Local $objWM, $co $objWMI = ObjGet('winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2') $co = $objWMI.ExecQuery('Select * from Win32_Service WHERE name = "' & $Dienst & '"') If Not IsObj($co) Then Return SetError(1, 1, -1) For $ob In $co Return _Service_Error($ob.StopService()) Next EndFunc ;==>_Services_Stopp Func _Services_Pause($Dienst) ;Pause ein Service Local $errCode, $objWM, $co $objWMI = ObjGet('winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2') $co = $objWMI.ExecQuery('Select * from Win32_Service WHERE name = "' & $Dienst & '"') If Not IsObj($co) Then Return SetError(1, 1, -1) For $ob In $co Return _Service_Error($ob.PauseService()) Next EndFunc ;==>_Services_Pause Func _Services_InterrogateService($Dienst) ;Fordert, dass ein Dienst seinen Status aktualisieren Local $errCode, $objWM, $co $objWMI = ObjGet('winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2') $co = $objWMI.ExecQuery('Select * from Win32_Service WHERE name = "' & $Dienst & '"') If Not IsObj($co) Then Return SetError(1, 1, -1) For $ob In $co Return _Service_Error($ob.InterrogateService()) Next EndFunc ;==>_Services_InterrogateService Func _Services_Resume($Dienst) ; Startet eine Auto-Start-Dienstleistungen, die angehalten wurde. Local $errCode, $objWM, $co $objWMI = ObjGet('winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2') $co = $objWMI.ExecQuery('Select * from Win32_Service WHERE Name = "' & $Dienst & '" and State = "Paused" and StartMode = "Auto"') If Not IsObj($co) Then Return SetError(1, 1, -1) For $ob In $co Return _Service_Error($ob.ResumeService()) Next EndFunc ;==>_Services_Resume Func _Get_LoadOrderGroup() ; Listet alle Load Order Group ( kann man auch aus der Restrierung auslesen unter HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\GroupOrderList ) Local $objWMI = ObjGet('winmgmts:\\.\root\cimv2') Local $co = $objWMI.ExecQuery('Select * from Win32_LoadOrderGroup') If Not IsObj($co) Then SetError(1, 1, -1) Local $Return_Array[$co.Count][4], $i = 0 For $ob In $co $Return_Array[$i][0] = $ob.Name $Return_Array[$i][1] = $ob.DriverEnabled $Return_Array[$i][2] = $ob.GroupOrder $Return_Array[$i][3] = $ob.Status $i += 1 Next Return $Return_Array EndFunc ;==>_Get_LoadOrderGroup Func _Services_VDependent($Dienst) ;Auflisten Dependent Vordersatz Dienste für ein Service Local $Return_Array, $objWMI, $co $objWMI = ObjGet('winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2') $co = $objWMI.ExecQuery('Associators of {Win32_service.Name="' & $Dienst & '"} Where AssocClass=Win32_DependentService Role=Dependent') If Not IsObj($co) Then Return SetError(1, 1, -1) For $ob In $co $Return_Array &= '|' & $ob.DisplayName Next Return StringSplit(StringTrimLeft($Return_Array, 1), '|') EndFunc ;==>_Services_VDependent Func _Services_VAntecedent($Dienst) ;Auflisten Antecedent Vordersatz Dienste für ein Service Local $Return_Array, $objWMI, $co $objWMI = ObjGet('winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2') $co = $objWMI.ExecQuery('Associators of {Win32_service.Name="' & $Dienst & '"} Where AssocClass=Win32_DependentService Role=Antecedent') If Not IsObj($co) Then Return SetError(1, 1, -1) For $ob In $co $Return_Array &= '|' & $ob.DisplayName Next Return StringSplit(StringTrimLeft($Return_Array, 1), '|') EndFunc ;==>_Services_VAntecedent Func _Services_RunStopp($State) ; Liste aller Laufenden oder gestoppten Service [ Running , Stopped) Local $objWMI = ObjGet('winmgmts:{impersonationLevel=Impersonate}!\\.\root\cimv2') Local $co = $objWMI.ExecQuery('SELECT * FROM Win32_Service WHERE State = "' & $State & '"') If Not IsObj($co) Then Return SetError(1, 1, -1) Local $Return_Array[$co.Count][2], $i = 0 For $ob In $co $Return_Array[$i][0] = $ob.DisplayName $Return_Array[$i][1] = $ob.State $i += 1 Next Return $Return_Array EndFunc ;==>_Services_RunStopp Func _Services_RIProzess($ProcessID) ;Bestimmende Running Services im Prozess Local $Return_Array, $objWMI, $co $objWMI = ObjGet('winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2') $co = $objWMI.ExecQuery('Select * from Win32_Service Where ProcessID = "' & $ProcessID & '"') If Not IsObj($co) Then Return SetError(1, 1, -1) For $ob In $co $Return_Array &= '|' & $ob.DisplayName Next Return StringSplit(StringTrimLeft($Return_Array, 1), '|') EndFunc ;==>_Services_RIProzess Func _Services_Properties($Dienst) ;Abrufen von ein Service die Properties Local $Return_Array, $objWMI, $co $objWMI = ObjGet('winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2') $co = $objWMI.ExecQuery('Select * from Win32_Service Where Name = "' & $Dienst & '"') If Not IsObj($co) Then Return SetError(1, 1, -1) For $ob In $co $Return_Array &= '|' & $ob.SystemName & '|' & $ob.Name & '|' & $ob.ServiceType & '|' & $ob.State & '|' & $ob.ExitCode & '|' & _ $ob.ProcessID & '|' & $ob.AcceptPause & '|' & $ob.AcceptStop & '|' & $ob.Caption & '|' & $ob.Description & '|' & _ $ob.DesktopInteract & '|' & $ob.DisplayName & '|' & $ob.ErrorControl & '|' & $ob.PathName & '|' & $ob.Started & '|' & _ $ob.StartName & '|' & $ob.Status & '|' & $ob.StartMode Next Return StringSplit(StringTrimLeft($Return_Array, 1), '|') EndFunc ;==>_Services_Properties Func _Services_All() ;Listet alle Services eines PC Local $ServSet = ObjGet('winmgmts:{impersonationLevel=impersonate}!//.') Local $ob = $ServSet.InstancesOf('Win32_Service') If Not IsObj($ob) Then Return SetError(1, 1, -1) Local $Return_Array[$ob.Count][9], $i = 0 For $Serv In $ob $Return_Array[$i][0] = $Serv.Name $Return_Array[$i][1] = $Serv.acceptPause $Return_Array[$i][2] = $Serv.acceptStop $Return_Array[$i][3] = $Serv.PathName $Return_Array[$i][4] = $Serv.Status $Return_Array[$i][5] = $Serv.State $Return_Array[$i][6] = $Serv.StartMode $Return_Array[$i][7] = $Serv.StartName $Return_Array[$i][8] = $Serv.Caption $i += 1 Next Return $Return_Array EndFunc ;==>_Services_All Func _GetAccep_ServicesPause($Flag) ; Listet alle die in Pause geschickt werden können oder nicht [ True, False ] Local $objWMI = ObjGet('winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2') Local $co = $objWMI.ExecQuery('Select * from Win32_Service Where AcceptPause = ' & $Flag) If Not IsObj($co) Then Return SetError(1, 1, -1) Local $Return_Array[$co.Count][3], $i = 0 For $ob In $co $Return_Array[$i][0] = $ob.ProcessID $Return_Array[$i][1] = $ob.Name $Return_Array[$i][2] = $ob.DisplayName $i += 1 Next Return $Return_Array EndFunc ;==>_GetAccep_ServicesPause Func _GetAccep_ServicesStopp($Flag) ; Listet alle die gestoppt werden können oder nicht [ True, False ] Local $objWMI = ObjGet('winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2') Local $co = $objWMI.ExecQuery('Select * from Win32_Service Where AcceptStop = ' & $Flag) If Not IsObj($co) Then Return SetError(1, 1, -1) Local $Return_Array[$co.Count][3], $i = 0 For $ob In $co $Return_Array[$i][0] = $ob.ProcessID $Return_Array[$i][1] = $ob.Name $Return_Array[$i][2] = $ob.DisplayName $i += 1 Next Return $Return_Array EndFunc ;==>_GetAccep_ServicesStopp Func _Services_Install($Name, $DisplayName, $PathName, Const $ServiceType, Const $ErrorControl, $StartMode, Const $DesktopInteract, $StartName, $StartPassword = '') ; Installieren eines Services Local $objWMI, $co $objWMI = ObjGet('winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2') $co = $objWMI.Get('Win32_BaseService') If Not IsObj($co) Then Return SetError(1, 1, -1) Return _Service_Error($co.Create($Name, $DisplayName, $PathName, $ServiceType, $ErrorControl, $StartMode, $DesktopInteract, $StartName, $StartPassword = '')) EndFunc ;==>_Services_Install Func _Services_Entfernen($Dienst) ;Entfernen ein Service Local $objWM, $co $objWMI = ObjGet('winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2') $co = $objWMI.ExecQuery('Select * from Win32_Service WHERE name = "' & $Dienst & '"') If Not IsObj($co) Then Return SetError(1, 1, -1) For $ob In $co If $ob.StopService() Then Return _Service_Error($ob.Delete()) Next EndFunc ;==>_Services_Entfernen Func _Service_Error($Error) ; Error Handle Local $Rerurn Switch $Error Case 0 $Rerurn = 'Erfolg' Case 1 $Rerurn = 'Nicht unterstützt' Case 2 $Rerurn = 'Zugriff verweigert' Case 3 $Rerurn = 'Abhängige Dienste werden ausgeführt' Case 4 $Rerurn = 'Invalid Service Control Ungültige Service Control' Case 5 $Rerurn = 'Service Control kann nicht akzeptieren' Case 6 $Rerurn = 'Service ist nicht aktiv' Case 7 $Rerurn = 'Service Request timeout' Case 8 $Rerurn = 'Unbekannter Fehler' Case 9 $Rerurn = 'Pfad nicht gefunden' Case 10 $Rerurn = 'Service bereits gestoppt' Case 11 $Rerurn = 'Service Datenbank gesperrt' Case 12 $Rerurn = 'Service Dependency Deleted' Case 13 $Rerurn = 'Service Dependency Failure' Case 14 $Rerurn = 'Service für Behinderte' Case 15 $Rerurn = 'Service Fehler bei der Anmeldung' Case 16 $Rerurn = 'Service zum Löschen markiert' Case 17 $Rerurn = 'Service Nr. Thread' Case 18 $Rerurn = 'Status Circular Dependency' Case 19 $Rerurn = 'Status Duplicate Name' Case 20 $Rerurn = 'Status - Ungültiger Name' Case 21 $Rerurn = 'Status - Ungültiger Parameter' Case 22 $Rerurn = 'Status - Invalid Service Account' Case 23 $Rerurn = 'Status - Dienst existiert' Case 24 $Rerurn = 'Service bereits angehalten' EndSwitch Return $Rerurn EndFunc ;==>_Service_Error