Newsgroup: it.comp.lang.visual-basic
Titolo: Terminare o avviare un servizio di Windows2000 SERVER o NT

C'è qualcuno che sà darmi qualche dritta per terminare e riavviare un
servizio installato su un server ???? grazie

 servizio installato su un server ???? grazie
Le dichiarazioni di funzioni e costanti non le scrivo; le trovi tutte
nell'API Text Viewer.
NB. Non verificato su Win2000
---------------------------------------------------------------
E' necessario controllare lo stato di un servizio prima di tentare
una modifica. Se lo stato è *_PENDING, occorre evitare di
effettuare una qualunque modifica.
SERVICES_ACTIVE_DATABASE può essere "ServicesActive"
oppure vbNullString. Indica la stessa cosa.
--------------- Controllo dello stato  ----------------------
Dim udtServiceStatus As SERVICE_STATUS
Dim hSCManager As Long
Dim hService As Long
Dim hServiceStatus As Long
    'Attiva il Service Control Manager
    hSCManager = OpenSCManager(_
        NomeComputer, _
        SERVICES_ACTIVE_DATABASE, _
        SC_MANAGER_ALL_ACCESS)
    'L'attivazione ha avuto successo
    If hSCManager <> 0 Then
        'NomeServizio (String) è il servizio da controllare
        hService = OpenService(_
            hSCManager, _
            NomeServizio, _
            SERVICE_ALL_ACCESS)
        If hService <> 0 Then
            'La funzione ritorna una struttura SERVICE_STATUS
            hServiceStatus = QueryServiceStatus(hService, udtServiceStatus)
            If hServiceStatus <> 0 Then
                Select Case udtServiceStatus.dwCurrentState
                    '
                    ' Lo stato può essere:
                    'SERVICE_STOPPED
                    'SERVICE_START_PENDING
                    'SERVICE_STOP_PENDING
                    'SERVICE_RUNNING
                    'SERVICE_CONTINUE_PENDING
                    'SERVICE_PAUSE_PENDING
                    'SERVICE_PAUSED
                    'Occorre agire di conseguenza. Se si intende fermare
                    'un servizio che è RUNNING, occorre prima valutare
                    'il membro udtServiceStatus.dwControlsAccepted. Se
                    'contiene SERVICE_ACCEPT_STOP si può procedere.
                End Select
            End If
            'Occorre sempre rilasciare gli handle ottenuti
            CloseServiceHandle hService
        End If
        CloseServiceHandle hSCManager
    End If
----------  Pause di un servizio   ----------------------
Dim udtServiceStatus As SERVICE_STATUS
Dim hSCManager As Long
Dim hService As Long
Dim lngRet As Long
    'Stessa procedura: ottiene l'handle del
    'Service Control Manager
    hSCManager = OpenSCManager(_
        NomeComputer, _
        SERVICES_ACTIVE_DATABASE, _
        SC_MANAGER_ALL_ACCESS)
    'Ottiene l'handle del servizio "NomeServizio"
    If hSCManager <> 0 Then
        hService = OpenService(_
            hSCManager, _
            NomeServizio, _
            SERVICE_ALL_ACCESS)
        'Modifica lo stato del servizio
        If hService <> 0 Then
            lngRet = ControlService(_
                hService, _
                SERVICE_CONTROL_PAUSE, _
                udtServiceStatus)
            'Rilascia gli handle ottenuti
            CloseServiceHandle hService
        End If
        CloseServiceHandle hSCManager
    End If
----------  Start di un servizio   ----------------------
Dim hSCManager As Long
Dim hService As Long
Dim lngRet As Long
    hSCManager = OpenSCManager(_
        NomeComputer, _
        SERVICES_ACTIVE_DATABASE, _
        SC_MANAGER_ALL_ACCESS)
    If hSCManager <> 0 Then
        hService = OpenService(_
        hSCManager, _
        NomeServizio, _
        SERVICE_ALL_ACCESS)
        If hService <> 0 Then
            'Con StartService è possibile passare dei parametri
            'al servizio. Qui si presume che non ce ne siano.
            lngRet = StartService(hService, 0, 0)
            CloseServiceHandle hService
        End If
        CloseServiceHandle hSCManager
    End If
----------  Stop di un servizio   -----------------------
Dim udtServiceStatus As SERVICE_STATUS
Dim hSCManager As Long
Dim hService As Long
Dim lngRet As Long
    hSCManager = OpenSCManager(_
        NomeComputer, _
        SERVICES_ACTIVE_DATABASE, _
        SC_MANAGER_ALL_ACCESS)
    If hSCManager <> 0 Then
        hService = OpenService(_
            hSCManager, _
            NomeServizio, _
            SERVICE_ALL_ACCESS)
        If hService <> 0 Then
            'In questo caso nella struttura udtServiceStatus viene
            'riportato lo stato più recente del servizio in questione
            lngRet = ControlService(hService, _
                SERVICE_CONTROL_STOP, _
                udtServiceStatus)
            CloseServiceHandle hService
        End If
        CloseServiceHandle hSCManager
    End If