Seite 1 von 1
Schnell auf laufenden Dienst prüfen?
Verfasst: 11.08.2008 10:32
von Kukulkan
Hallo,
Ich suche eine Möglichkeit, schnell und zuverlässig zu prüfen ob ein Dienst mit einem bestimmten Namen installiert ist und ob der gerade läuft. Gibt es einen Weg über die Registry oder muss ich API bemühen?
Ach ja, ich suche Codeschnipsel und keine Library...
Volker
Verfasst: 11.08.2008 10:58
von Rings
du wirst eigentlich alles in der pbosl finden, im Source .
(enumerieren der dienste, nachschauen ob er läuft etc.)
und ob Registry oder APi , kommt aufs selbe raus -> nur windows .
Verfasst: 13.08.2008 00:57
von HeX0R
Hierfür hatte ich mal ne Erweiterung zum PBOSL gemacht, weil ich das Enumerieren zu umständlich fand, wenn ich eh weiss, wie der Service heisst:
Code: Alles auswählen
#SRSC_MANAGER_ALL_ACCESS = $F003F
#SRSERVICE_ALL_ACCESS = $F01FF
ProcedureDLL.l GetServiceStatusEx(ServiceName.s)
Protected Result.l, schSCManager.l, schService.l
schSCManager = OpenSCManager_(0, 0, #SRSC_MANAGER_ALL_ACCESS)
If schSCManager
schService = OpenService_(schSCManager, @ServiceName, #SRSERVICE_ALL_ACCESS)
If schService
If QueryServiceStatus_(schService, @Result) = 0
Result = 0
EndIf
CloseServiceHandle_(schService)
EndIf
CloseServiceHandle_(schSCManager)
EndIf
ProcedureReturn Result
EndProcedure
Verfasst: 13.08.2008 13:13
von Kukulkan
Hallo XeXOR,
Danke für den Code, aber bei mir bringt das immer 0 oder es schmiert bei ProcedureReturn Result im Debugger mit
invalid memory access ab.
PB4.20 / WinXP SP2
Volker
Verfasst: 13.08.2008 19:02
von HeX0R
War auch irgendwie nicht ganz richtig (hab in der MSDN nochmal nachgelesen):
Code: Alles auswählen
#SRSC_MANAGER_ALL_ACCESS = $F003F
#SRSERVICE_ALL_ACCESS = $F01FF
Global Dim Service_Message.s(7)
Service_Message(0) = "Service unknown"
Service_Message(1) = "Service Stopped"
Service_Message(2) = "Service Start Pending"
Service_Message(3) = "Service Stop Pending"
Service_Message(4) = "Service Running"
Service_Message(5) = "Service Continue Pending"
Service_Message(6) = "Service Pause Pending"
Service_Message(7) = "Service Paused"
ProcedureDLL.l GetServiceStatusEx(ServiceName.s)
Protected SS.SERVICE_STATUS, Result.l, schSCManager.l, schService.l
schSCManager = OpenSCManager_(0, 0, #SRSC_MANAGER_ALL_ACCESS)
If schSCManager
schService = OpenService_(schSCManager, @ServiceName, #SRSERVICE_ALL_ACCESS)
If schService
If QueryServiceStatus_(schService, @SS)
Result = SS\dwCurrentState
EndIf
CloseServiceHandle_(schService)
EndIf
CloseServiceHandle_(schSCManager)
EndIf
ProcedureReturn Result
EndProcedure
Debug Service_Message(GetServiceStatusEx("srservice"))
Ich hatte das bei den Schwiegereltern zusammengekleistert, nur war ich dort immer im Warsteiner-Nebel
