Ich habe zugleich noch eine Service.au3 geschrieben ( ich weiß im Englisch Forum gibt es schon eine ), ich komm noch nicht mit der DLL Verarbeitung zu Recht darum habe ich die VBS Skripte umgeschrieben.
Inhalt: Service : Installieren, Starten, Beenden, Pausieren, Aktualisieren und Löschen (wenn zugelassen)
Und vieles mehr.
Da kommen noch ein paar Funktionen dazu, vielleicht hat einer von euch noch Ideen und Anregungen?
Service_VB.au3
Spoiler anzeigen
#RequireAdmin
[/autoit] [autoit][/autoit] [autoit]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
LG Kleiner