Sicherstellung einer windows-Dienst ausgeführt wird, bevor die Anmeldung
Baute ich eine Anwendung, die als windows-Dienst ausgeführt und installiert wird durch meinen code.
Alles in Ordnung ist, außer bei der Anmeldung.
Wenn bei der ersten windows xp/server 2003-Anmeldebildschirm, ich bin nicht sicher, ob der Dienst überhaupt läuft. Wenn es so ist, dann funktioniert es wie es ist nicht funktionsfähig (der Dienst WINPCAP, so dass könnte ein Problem sein).
Die service-Einstellungen werden auf "Interaktion mit desktop" und führen Sie als SYSTEM.
Wie kann ich sicherstellen das der Dienst gestartet wird, bevor die windows-Anmeldung? Auch wie kann ich sicherstellen, dass es läuft, auch nachdem ich Abmelden?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es ein paar Punkte zu berücksichtigen.
Zunächst können Sie überprüfen, ob Ihr service wirklich läuft, vor dem login und nach dem logout von logging-Ereignisse im Windows-Ereignisprotokoll. So ziemlich alle Dienste, die dies tun, Wann immer Sie starten und stoppen, und Sie alle sollen das gleiche tun.
Kann es sein, dass WinPcap ist ein Teil des Problems. Es gibt ein paar goldene Regeln für die Verwendung von WinPcap in einem service.
1a) Ihr service muss nichts tun, was möglicherweise das WinPcap-service, um zu versuchen, zu starten, während Ihre eigenen Dienst gestartet wird, da dies zu einem deadlock in der Windows-Dienststeuerungs-Manager. Das bedeutet, dass, wenn die WinPcap Dienst nicht bereits SERVICE_RUNNING, wenn Ihr Dienst beginnt der Start, Sie muss nichts tun, was könnte es verursachen, zu beginnen, bis Sie nach Ihrem service SERVICE_RUNNING.
Gibt es zwei Möglichkeiten, dies zu gewährleisten. Entweder stellen Sie Ihrem service abhängig von npf, die Network Packet Filter service. Oder rufen Sie nicht alle WinPcap-Funktion, bis Sie nach Ihrem service SERVICE_RUNNING. Ich habe nicht versucht, diese Methode. Ich nehme dann die WinPcap-Funktion blockieren, bis der npf ist SERVICE_RUNNING.
1b) Wenn Sie Ihre service-abhängig von npf, werden Sie auch haben, um es abhängig nm (Network Monitor-Treiber) - wenn, und nur wenn nm auf dem system installiert ist. nm bietet WinPcap mit PPP/VPN-support, und WinPcap immer versucht, es zu verwenden, wenn installiert. Offensichtlich, wenn Sie nm eine Abhängigkeit des service-und nm nicht installiert ist, dann wird Ihr Dienst nicht gestartet werden.
Ich glaube nicht, dass es ist ein garantierter Weg, um sicherzustellen, dass Ihr Dienst startet, bevor der desktop angezeigt wird. Aber Sie könnten in der Lage sein zu helfen, die Dinge zusammen, durch die Schaffung eines Service-Control-Group, indem es auf das Ende der vorhandenen Liste von Service-Gruppen, und setzen Sie Ihren service in diese Gruppe. Ich bin nicht ganz davon überzeugt, dass dies ein 'zugelassen' Weg, um Ihren Dienst früher zu starten, denn wenn es eine zugelassene Weise, dann würde jeder es tun, und es wäre nicht mehr funktioniert. Aber es gibt einen Vorschlag, dass Dienste in einer Gruppe gestartet werden, bevor Leistungen, die nicht in einer Gruppe.
Blick auf HKEY_LOCAL_MACHINE, "SYSTEM\CurrentControlSet\Control\GroupOrderList" und HKEY_LOCAL_MACHINE, "SYSTEM\CurrentControlSet\Control\ServiceGroupOrder" und ein wenig Googeln.