Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Kukulkan
Beiträge: 1066 Registriert: 09.09.2004 07:07
Wohnort: Süddeutschland
Kontaktdaten:
Beitrag
von Kukulkan » 11.08.2008 10:32
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
Rings
Beiträge: 977 Registriert: 29.08.2004 08:48
Beitrag
von Rings » 11.08.2008 10:58
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 .
Rings hat geschrieben: ziert sich nich beim zitieren
HeX0R
Beiträge: 3055 Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X 96Gig Ram NVIDIA GEFORCE RTX 3060TI/8Gig Win11 64Bit G19 Tastatur 2x 24" + 1x27" Monitore Glorious O Wireless Maus PB 3.x-PB 6.x Oculus Quest 2 + 3
Kontaktdaten:
Beitrag
von HeX0R » 13.08.2008 00:57
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
Kukulkan
Beiträge: 1066 Registriert: 09.09.2004 07:07
Wohnort: Süddeutschland
Kontaktdaten:
Beitrag
von Kukulkan » 13.08.2008 13:13
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
HeX0R
Beiträge: 3055 Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X 96Gig Ram NVIDIA GEFORCE RTX 3060TI/8Gig Win11 64Bit G19 Tastatur 2x 24" + 1x27" Monitore Glorious O Wireless Maus PB 3.x-PB 6.x Oculus Quest 2 + 3
Kontaktdaten:
Beitrag
von HeX0R » 13.08.2008 19:02
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