• 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
    [autoit]

    #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

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit]

    LG Kleiner

  • Ok danke.
    Du solltest aber vllt. zu jeder Funktion eine Beschreibung machen.
    Es gibt da ein nettes Tool hier im AutoIt Forum das DescribeIt heißt, damit
    kann man diese Funktionsheader ganz simpel erstellen.

    Meine Projekte:
    ClipBoard Manager (beendet)
    Gutes ClipBoard Verwaltungs Programm mit nützlichen Funktionen.

    HTML Creator (beendet)
    Nützliches Tool um schnell ein eigenes HTML Dokument zu erstellen.

  • Kann man sicher mal gebrauchen :)

    Ok danke.
    Du solltest aber vllt. zu jeder Funktion eine Beschreibung machen.
    Es gibt da ein nettes Tool hier im AutoIt Forum das DescribeIt heißt, damit
    kann man diese Funktionsheader ganz simpel erstellen.

    Wenn die Funktionsbeschreibungen vorhanden sind geht's ab damit in die Archivierung ;)