Mehrere Windows-Dienste können sich einen Prozess teilen. In C # beginnen sie wie folgt:
%Vor% Der Aufruf der run-Methode blockiert den Thread, in dem main()
ausgeführt wird. Zur gleichen Zeit werden Ereignisse von Dienstleistungen gehandhabt. Wo werden sie ausgeführt?
Verwenden sie den asynchronen Prozeduraufruf im "Haupt" -Prozess, der nicht nur blockiert ist, sondern auch wartbar ist? Wenn dies der Fall ist, hat die Freigabe eines Prozesses für mehrere Dienste einen Leistungsnachteil. Laufen Handler in getrennten Threads? Werden sie außerhalb des Prozesses ausgeführt, der den Aufruf Run()
enthält?
In Windows können mehrere Dienste einen einzelnen Prozess mit dem SERVICE_WIN32_SHARE_PROCESS Servicetyp. .NET muss diesen Diensttyp verwenden, um mehrere Dienste in einem einzigen Prozess unter Windows zu registrieren.
Jeder registrierte Dienst hat einen Namen und eine native Eingangspunktadresse, die durch SERVICE_TABLE_ENTRY Struktur. .NET soll für jeden Dienst, der an die Methode SERVICE_TABLE_ENTRY
übergeben wird, eine ServiceBase.Run
erstellen und die Funktion StartServiceCtrlDispatcher
mit diesen Informationen aufrufen.
Um Benachrichtigungen über den Dienststatus zu erhalten, muss der Einstiegspunkt ( ServiceMain
wie von ServiceBase
class implementiert) RegisterServiceCtrlHandlerEx , um Benachrichtigungen zu erhalten. Diese Benachrichtigungen werden mithilfe von APCs gesendet. Als Randnotiz wird auch die NotifyServiceStatusChange API verwendet APCs.
Was Sie wahrscheinlich wollen, ist die Windows-Service-Architektur und wie Service-Anwendungen in ihnen integriert sind.
Es gibt bereits einen sehr guten Artikel zu diesem Thema im MSDN, die hier zu finden sind.
Es erklärt nicht nur, wie Windows mit Diensten interagiert, sondern auch, wie die Dienste-Datenbank (zumindest teilweise) funktioniert.
Der Artikel erklärt auch, wie Betriebssystemdienste funktionieren, und gibt einen Hinweis auf Hostingdienste im IIS (Internetinformationsdienste).