[Delphi] Bepalen of een process een service is

Pagina: 1
Acties:

  • bgever
  • Registratie: April 2002
  • Laatst online: 28-05-2021
Ik zit met het volgende probleem:
Apache kun je als een console app (process) en als een service draaien. Nu wil ik checken of Apache wel of niet draait, en op welke manier ie draait, als een console window, of een service.

Nu had ik een oplossing bedacht, maar deze blijkt niet te werken. Bij het checken of het een process is, zit namelijk het probleem. Als een service namelijk actief is, dan draait deze namelijk onder een process. Maar laat deze nu precies de zelfde naam hebben als de console app: Apache.exe.
Nu dacht ik het zo aan te pakken; als apache.exe draait, wordt gekeken of er een service draait die de zelfde binary file (dus het zelfde bestand) gebruikt om te draaien. Als dat zo is, dan moet er één process van de lijst afgeteld worden. Als er dan nog een tweede apache.exe daait, zou dat betekenen dat een console app actief is. Helaas werkt dit bij apache niet, omdat als er een apache service draait, er twee apache.exe processes komen, en dat mij app dus denkt dat er én een service draait, én een console window.

Nu weet ik niet hoe ik dit moet aanpakken. Laten we aannemen dat ik niet kan ruiken of een service meerdere instanties van een process aanmaakt. Dus, die aftreksom van 1 naar 2 te maken werkt dus niet. (dit omdat ik dit niet alleen bij apache wil checken maar bij meerdere apps)
De enigste oplossing zou zijn, als ik aan een process kan zien, of het een service of een normale applicatie is. Is hier een mogelijkheid voor en zoja, hoe?

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Je kan alle services afgaan en dan kijken of apache er tussen zit.

Zie de functies OpenSCManager, OpenService, QueryServiceStatus enz

We adore chaos because we like to restore order - M.C. Escher


  • martijn_brinkers
  • Registratie: November 2001
  • Laatst online: 31-10-2025
misschien heb je hier wat aan?

http://tinyurl.com/qkdd

  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 00:12

Tomatoman

Fulltime prutser

Kun je niet wat met EnumServicesStatusEx?
The EnumServicesStatusEx function enumerates services in the specified service control manager database. The name and status of each service are provided, along with additional data based on the specified information level.
[Edit]
Hmm, laat maar. Zoals LordLarry als zegt kun je QueryServiceStatus(Ex) gebruiken, da's handiger.

[ Voor 16% gewijzigd door Tomatoman op 11-10-2003 18:54 ]

Een goede grap mag vrienden kosten.


  • bgever
  • Registratie: April 2002
  • Laatst online: 28-05-2021
LordLarry schreef op 11 oktober 2003 @ 16:58:
Je kan alle services afgaan en dan kijken of apache er tussen zit.

Zie de functies OpenSCManager, OpenService, QueryServiceStatus enz
Misschien was mijn verhaal hierboven onduidelijk, maar dit doe ik op dit moment al. Ik ga alle services na (ongeacht de naam), en check dan de binary file (path naar app dat gedraait wordt). Deze staat in de service config.
Het probleem is echter, dat apache twee processes aanmaakt als je de service start! En er dan maar één service draait. Wat ik dus zou moeten weten, is of een service meer dan een process gebruikt.
De methode QueryServiceStatusEx had ik niet gezien, omdat deze niet in de Help van delhp (Win32 SDK) stond, maar op MSDN heb ik de volgende pagina gevonden: http://msdn.microsoft.com...ce_status_process_str.asp . Dat is de waarde die je terug krijgt door QueryServiceStatusEx aan te roepen, en waar dus info over de service in staat.
Ik kwam er niet uit, hoe ik nou hieraan kan zien of er meerdere processes draaien voor één service.

Heeft iemand hier een oplossing voor, of weet iemand hoe je dit toch kunt achterhalen?

  • bgever
  • Registratie: April 2002
  • Laatst online: 28-05-2021
Hier heb ik ook naar gekeken, maar die NOTE die brengt roet in het eten. Als deze beste man hiermee bedoelt dat het een process is dat onder het SYSTEM account draait heeft deze oplossing dan geen nut, omdat je dan die token niet kan vinden, omdat apache als je het als een service draait onder SYSTEM draait, en als een console onder het actieve gebruikersaccount draait.
Nu had ik nog een andere - misschien niet zo'n mooie, maar het is er een - oplossing bedacht. Als apache start, dan maakt hij meteen die tweede process aan. Nu zou je kunnen kijken wanneer alle processen met de gelijknamige exe gemaakt zijn. Als dat bijv. binnen een paar sec is, dan zal die wel bij de service horen.

Als iemand een beter idee heeft, laat het me dan weten :).

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Zijn er al niet bestaande Apache-in-de-gaten-houdt-programma's? Misschien kan je kijken hoe hunnie het doen

We adore chaos because we like to restore order - M.C. Escher


  • bgever
  • Registratie: April 2002
  • Laatst online: 28-05-2021
Pcies op de zelfde manier als ik :). Alleen is bij mij het geval dat ik niet een specefieke app voor Apache2, of apache1 schrijf, maar het is de bedoeling om zoveel mogelijk servers te supporten.
Dus apache1, apache2, IIS, MySQL, PostgreSQL, en meerdere zo mogelijk. Misschien snap je nu ook mijn probleem beter. Als iemand als devv omgeving bijv. apache1 én apache2 heeft geinstalleerd (om bijv. te switchen tussen omgeving) moet mijn app wel kunnen herkennen om welke versie het gaat, en of het een console of service is...
Maarja, ik maak die app voor de fun, dus eigenlijk heb ik zoiets van; voor welke simpele ziel maak ik het nu eigenlijk? Ik denk dat ik daarom maar beter gewoon een warning message kan geven als er gekeken wordt of Apache als een console draait en er al een draaiende service gedetecteerd wordt die de zelde exefile gebruikt.
Ik zit er nu al twee dagen mee en zo schiet het niet op. Mocht iemand een goede oplossing hebben, post 'm maar, maar voor zover houd ik het maar voor gezien..
Pagina: 1