Dienst beenden? [GELÖST]



  • Hallo, hab hier mal ne Frage

    Wie beende ich einen Dienst?

    hab ewig gegooglt und des einzigste was dabei rausgekommen ist ist dieser Befehl:

    ControlService(
      __in   SC_HANDLE hService,
      __in   DWORD dwControl,
      __out  LPSERVICE_STATUS lpServiceStatus
    );
    

    und der Zweite Parameter muss ja SERVICE_CONTROL_STOP sein
    aber wie sieht des dann fertig aus?
    hab keinen peil wie ich zu dem handle des prozesses kommen soll 😕

    LG Flo



  • Willst du jetzt deinen eigenen Dienst beenden oder einen fremden?
    Wenn's der eigene ist, dann reicht es dein Programm zu beenden.

    Andernfalls kannst du über EnumProcesses das Handle bekommen.



  • FrEEzE2046 schrieb:

    Willst du jetzt deinen eigenen Dienst beenden oder einen fremden?
    Wenn's der eigene ist, dann reicht es dein Programm zu beenden.

    Andernfalls kannst du über EnumProcesses das Handle bekommen.

    ich möchte einen fremden dienst beenden, danke werd mir das mal anschauen...
    lol *banhof*
    kannst mir nen beispielcode geben?
    mit dem link komm ich nich ganz klar 😃



  • Da ist doch ein Beispielcode mit verlinkt.

    Wie der Name schon sagt erhälst du ein Array mit ALLEN aktuell laufenden Prozessen. Ich will nicht sagen, dass das jetzt der beste Weg ist ... ein anderer fällt mir gerade nur nicht ein.

    edit:
    Wenn es dir jedoch einfach nur darum geht den Dienst zu beenden, dann mach's doch per Konsolenbefehl: "net stop Dienstname"



  • Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • FrEEzE2046 schrieb:

    Da ist doch ein Beispielcode mit verlinkt.

    Wie der Name schon sagt erhälst du ein Array mit ALLEN aktuell laufenden Prozessen. Ich will nicht sagen, dass das jetzt der beste Weg ist ... ein anderer fällt mir gerade nur nicht ein.

    edit:
    Wenn es dir jedoch einfach nur darum geht den Dienst zu beenden, dann mach's doch per Konsolenbefehl: "net stop Dienstname"

    hey, des mit netstop is ne sehr gute idee, danke 🙂



  • ZockerFloh7 schrieb:

    hey, des mit netstop is ne sehr gute idee, danke 🙂

    Ob's "sehr" gut ist, hängt von deinen Anforderungen ab. Du wirst schlecht Feedback bekommen, ob der Dienst wirklich beendet wurde. Rudimentär evtl. gebrauchbar.

    Um was für einen Dienst handelt es sich denn, wenn man fragen darf.



  • Du brauchst die Prozess ID überhaupt nicht. Das Vorgehen zum Beenden eines Dienstes ist Folgendes:

    1. Handle ServiceControlManager mittels OpenSCManager() besorgen
    2. Handle des Dienstes mittels OpenService() besorgen
    3. Dienst per ControlService/ControlServiceEx stoppen
    4. Handles aus 1) und 2) mit CloseServiceHandle wieder freigeben

Anmelden zum Antworten