PDA

View Full Version : [WINDOWS non .NET] controllare se un servizio è installato


blackskop
18-11-2008, 14:11
Ciao a tutti. Come posso verificare se un servizio è stato installato? Mi servirebbe un programmino che mi restituisca true o false (oppure 0 o 1) a seconda se il nome di un servizio passato in input è presente tra i servizi installati. Questo programmino non deve essere scritto utilizzando .NET

variabilepippo
18-11-2008, 14:36
Puoi sfruttare la tecnologia WMI o interagire direttamente con il Service Control Manager (http://msdn.microsoft.com/en-us/library/ms685150(VS.85).aspx).

blackskop
18-11-2008, 15:02
Puoi sfruttare la tecnologia WMI o interagire direttamente con il Service Control Manager (http://msdn.microsoft.com/en-us/library/ms685150(VS.85).aspx).

Puoi fare qualche esempio in visual basic o delphi?

variabilepippo
18-11-2008, 15:10
Cerca la documentazione relativa alle 2 tecniche, troverai anche una marea di esempi... L'interazione con SCM non richiede prerequisiti particolari (basta invocare le funzioni nel modo corretto), per controllare i servizi tramite WMI fai riferimento a Win32_ServiceControl Class (http://msdn.microsoft.com/en-us/library/aa394419(VS.85).aspx) e Win32_Service Class (http://msdn.microsoft.com/en-us/library/aa394418(VS.85).aspx).

blackskop
18-11-2008, 15:22
Cerca la documentazione relativa alle 2 tecniche, troverai anche una marea di esempi... L'interazione con SCM non richiede prerequisiti particolari (basta invocare le funzioni nel modo corretto), per controllare i servizi tramite WMI fai riferimento a Win32_ServiceControl Class (http://msdn.microsoft.com/en-us/library/aa394419(VS.85).aspx) e Win32_Service Class (http://msdn.microsoft.com/en-us/library/aa394418(VS.85).aspx).

Posso utilizzare SCM partendo da un ogggetto OLE (che comunque devo ricavarmi)?

gugoXX
18-11-2008, 16:51
Oppure se sai lanciare una command line (al limite anche un file Batch)

puoi vedere se riesci a parsare il risultato di
SC QUERY

oppure, se sai il nome del servizio da controllare (almeno quello, spero)
SC QUERY Spooler

blackskop
18-11-2008, 19:25
Grazie lo stesso ragazzi, ho scoperto che SCM inserisce qui

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services

tutte le info sui servizi installati ;)

MarcoGG
19-11-2008, 08:15
Ciao a tutti. Come posso verificare se un servizio è stato installato? Mi servirebbe un programmino che mi restituisca true o false (oppure 0 o 1) a seconda se il nome di un servizio passato in input è presente tra i servizi installati. Questo programmino non deve essere scritto utilizzando .NET

Si può fare velocemente in VB6, e riadattato, anche per VBA ( può girare dentro un Foglio di Excel ).
Questo codice da la lista dei servizi trovati nel sistema + il loro attuale stato.
Tutto ciò che serve è un pulsante ( cmd_listaservizi ) e una ListBox ( List1 ) :

Private Sub cmd_listaservizi_Click()

Dim servizi As Object
Dim servizio As Object
Dim stato As String
Set servizi = GetObject("winmgmts:").ExecQuery("SELECT Name from Win32_Service")
For Each servizio In servizi
Dim shellApp As Object
Set shellApp = CreateObject("Shell.Application")
If shellApp.IsServiceRunning(servizio.Name) = True Then
stato = "Servizio Attivo"
Else
stato = "Servizio Non Attivo"
End If
List1.AddItem (servizio.Name) & " - Stato : " & stato
Set shellApp = Nothing
Next
Set servizio = Nothing
Set servizi = Nothing

End Sub

E il gioco è fatto. ;)