Freigeben über


CAtlServiceModuleT-Klasse

Diese Klasse implementiert einen Dienst.

Wichtig

Diese Klasse und ihre Member können nicht in Anwendungen verwendet werden, die in der Windows-Runtime ausgeführt werden.

Syntax

template <class T, UINT nServiceNameID>
class ATL_NO_VTABLE CAtlServiceModuleT : public CAtlExeModuleT<T>

Parameter

T
Ihre klasse abgeleitet von CAtlServiceModuleT.

nServiceNameID
Der Ressourcenbezeichner des Diensts.

Member

Öffentliche Konstruktoren

Name Beschreibung
CAtlServiceModuleT::CAtlServiceModuleT Der Konstruktor.

Öffentliche Methoden

Name Beschreibung
CAtlServiceModuleT::Handler Die Handlerroutine für den Dienst.
CAtlServiceModuleT::InitializeSecurity Stellt die Standardsicherheitseinstellungen für den Dienst bereit.
CAtlServiceModuleT::Install Installiert und erstellt den Dienst.
CAtlServiceModuleT::IsInstalled Bestätigt, dass der Dienst installiert wurde.
CAtlServiceModuleT::LogEvent Schreibt in das Ereignisprotokoll.
CAtlServiceModuleT::OnContinue Überschreiben Sie diese Methode, um den Dienst fortzusetzen.
CAtlServiceModuleT::OnInterrogate Überschreiben Sie diese Methode, um den Dienst abzufragen.
CAtlServiceModuleT::OnPause Überschreiben Sie diese Methode, um den Dienst anzuhalten.
CAtlServiceModulet::OnShutdown Überschreiben Sie diese Methode, um den Dienst herunterzufahren.
CAtlServiceModuleT::OnStop Überschreiben Sie diese Methode, um den Dienst zu beenden.
CAtlServiceModuleT::OnUnknownRequest Überschreiben Sie diese Methode, um unbekannte Anforderungen an den Dienst zu verarbeiten.
CAtlServiceModuleT::P arseCommandLine Analysiert die Befehlszeile und führt bei Bedarf eine Registrierung durch.
CAtlServiceModuleT::P reMessageLoop Diese Methode wird unmittelbar vor dem Eingeben der Nachrichtenschleife aufgerufen.
CAtlServiceModuleT::RegisterAppId Registriert den Dienst in der Registrierung.
CAtlServiceModuleT::Run Führt den Dienst aus.
CAtlServiceModuleT::ServiceMain Die Vom Dienststeuerungs-Manager aufgerufene Methode.
CAtlServiceModuleT::SetServiceStatus Aktualisiert den Dienststatus.
CAtlServiceModuleT::Start Wird aufgerufen, wenn CAtlServiceModuleT::WinMain der Dienst gestartet wird.
CAtlServiceModuleT::Uninstall Beendet und entfernt den Dienst.
CAtlServiceModuleT::Unlock Erhöht die Sperranzahl des Diensts.
CAtlServiceModuleT::UnregisterAppId Entfernt den Dienst aus der Registrierung.
CAtlServiceModuleT::WinMain Diese Methode implementiert den code, der zum Ausführen des Diensts erforderlich ist.

Öffentliche Datenmember

Name Beschreibung
CAtlServiceModuleT::m_bService Flag, das angibt, dass das Programm als Dienst ausgeführt wird.
CAtlServiceModuleT::m_dwThreadID Membervariable, die den Threadbezeichner speichert.
CAtlServiceModuleT::m_hServiceStatus Membervariable, die ein Handle in der Statusinformationsstruktur für den aktuellen Dienst speichert.
CAtlServiceModuleT::m_status Membervariable, die die Statusinformationsstruktur für den aktuellen Dienst speichert.
CAtlServiceModuleT::m_szServiceName Der Name des diensts, der registriert wird.

Hinweise

CAtlServiceModuleT, abgeleitet von CAtlExeModuleT, implementiert ein ATL-Dienstmodul. CAtlServiceModuleT stellt Methoden für die Befehlszeilenverarbeitung, Installation, Registrierung und Entfernung bereit. Wenn zusätzliche Funktionen erforderlich sind, können diese und andere Methoden außer Kraft gesetzt werden.

Diese Klasse ersetzt die veraltete CComModule-Klasse , die in früheren Versionen von ATL verwendet wird. Weitere Informationen finden Sie unter ATL-Modulklassen .

Vererbungshierarchie

_ATL_MODULE

CAtlModule

CAtlModuleT

CAtlExeModuleT

CAtlServiceModuleT

Anforderungen

Kopfzeile: atlbase.h

CAtlServiceModuleT::CAtlServiceModuleT

Der Konstruktor.

CAtlServiceModuleT() throw();

Hinweise

Initialisiert die Datenmmber und legt den anfänglichen Dienststatus fest.

CAtlServiceModuleT::Handler

Die Handlerroutine für den Dienst.

void Handler(DWORD dwOpcode) throw();

Parameter

dwOpcode
Ein Switch, der den Handlervorgang definiert. Ausführliche Informationen finden Sie in den Anmerkungen.

Hinweise

Dies ist der Code, den der Service Control Manager (SCM) aufruft, um den Status des Diensts abzurufen und Anweisungen wie Stopp oder Pause ausstellen. Der SCM übergibt einen Vorgangscode( siehe unten), um Handler anzugeben, was der Dienst tun soll.

Betriebscode Bedeutung
SERVICE_CONTROL_STOP Beendet den Dienst. Überschreiben Sie die Methode CAtlServiceModuleT::OnStop in atlbase.h, um das Verhalten zu ändern.
SERVICE_CONTROL_PAUSE Der Benutzer wurde implementiert. Überschreiben Sie die leere Methode CAtlServiceModuleT::OnPause in atlbase.h, um den Dienst anzuhalten.
SERVICE_CONTROL_CONTINUE Der Benutzer wurde implementiert. Überschreiben Sie die leere Methode CAtlServiceModuleT::OnContinue in atlbase.h, um den Dienst fortzusetzen.
SERVICE_CONTROL_INTERROGATE Der Benutzer wurde implementiert. Überschreiben Sie die leere Methode CAtlServiceModuleT::OnInterrogate in atlbase.h, um den Dienst abzufragen.
SERVICE_CONTROL_SHUTDOWN Der Benutzer wurde implementiert. Überschreiben Sie die leere Methode CAtlServiceModuleT::OnShutdown in atlbase.h, um den Dienst herunterzufahren.

Wenn der Vorgangscode nicht erkannt wird, wird die Methode CAtlServiceModuleT::OnUnknownRequest aufgerufen.

Ein standardmäßiger ATL-generierter Dienst behandelt nur die Stop-Anweisung. Wenn der SCM die Stopp-Anweisung übergibt, teilt der Dienst dem SCM mit, dass das Programm beendet werden soll. Der Dienst ruft dann auf PostThreadMessage , um eine beendete Nachricht an sich selbst zu posten. Dadurch wird die Nachrichtenschleife beendet, und der Dienst wird letztendlich geschlossen.

CAtlServiceModuleT::InitializeSecurity

Stellt die Standardsicherheitseinstellungen für den Dienst bereit.

HRESULT InitializeSecurity() throw();

Rückgabewert

S_OK bei Erfolg, ein HRESULT-Fehler bei einem Fehlschlag.

Hinweise

Jede Klasse, von CAtlServiceModuleT der abgeleitet wird, muss diese Methode in der abgeleiteten Klasse implementieren.

Verwenden Sie die PKT-Authentifizierung, identitätswechselnde Ebene von RPC_C_IMP_LEVEL_IDENTIFY und einen entsprechenden Nicht-Null-Sicherheitsdeskriptor im Aufruf von CoInitializeSecurity.

Für vom Assistenten generierte nicht attributierte Dienstprojekte wäre dies in

class CNonAttribServiceModule : public CAtlServiceModuleT< CNonAttribServiceModule, IDS_SERVICENAME >
{
public :
   DECLARE_LIBID(LIBID_NonAttribServiceLib)
   DECLARE_REGISTRY_APPID_RESOURCEID(IDR_NONATTRIBSERVICE, "{29160736-339F-4A1C-ABEF-C320CE103E12}")
   HRESULT InitializeSecurity() throw()
   {
      // TODO : Call CoInitializeSecurity and provide the appropriate security settings for 
      // your service
      // Suggested - PKT Level Authentication, 
      // Impersonation Level of RPC_C_IMP_LEVEL_IDENTIFY 
      // and an appropriate Non NULL Security Descriptor.

      return S_OK;
   }
};

Bei Attributdienstprojekten wäre dies in

[ module(SERVICE, uuid = "{D3103322-7B70-4581-8E59-12769BD9A62B}", 
   name = "AttribService", 
   helpstring = "AttribService 1.0 Type Library", 
   resource_name="IDS_SERVICENAME") ]
class CAttribServiceModule
{
public:
   HRESULT InitializeSecurity() throw()
   {
      // TODO : Call CoInitializeSecurity and provide the appropriate security settings for 
      // your service
      // Suggested - PKT Level Authentication, 
      // Impersonation Level of RPC_C_IMP_LEVEL_IDENTIFY 
      // and an appropriate Non NULL Security Descriptor.

      return S_OK;
   }
};

CAtlServiceModuleT::Install

Installiert und erstellt den Dienst.

BOOL Install() throw();

Rückgabewert

Gibt WAHR für Erfolg, FALSE bei Fehler zurück.

Hinweise

Installiert den Dienst in der SCM-Datenbank (Service Control Manager), und erstellt dann das Dienstobjekt. Wenn der Dienst nicht erstellt werden konnte, wird ein Meldungsfeld angezeigt, und die Methode gibt FALSE zurück.

CAtlServiceModuleT::IsInstalled

Bestätigt, dass der Dienst installiert wurde.

BOOL IsInstalled() throw();

Rückgabewert

Gibt TRUE zurück, wenn der Dienst installiert ist, andernfalls FALSE.

CAtlServiceModuleT::LogEvent

Schreibt in das Ereignisprotokoll.

void __cdecl LogEvent(LPCTSTR pszFormat, ...) throw();

Parameter

pszFormat
Die in das Ereignisprotokoll zu schreibende Zeichenfolge.

...
Optionale zusätzliche Zeichenfolgen, die in das Ereignisprotokoll geschrieben werden sollen.

Hinweise

Mit dieser Methode werden Details in ein Ereignisprotokoll mithilfe der Funktion ReportEvent geschrieben. Wenn kein Dienst ausgeführt wird, wird die Zeichenfolge an die Konsole gesendet.

CAtlServiceModuleT::m_bService

Flag, das angibt, dass das Programm als Dienst ausgeführt wird.

BOOL m_bService;

Hinweise

Wird verwendet, um eine Dienst EXE von einer Application EXE zu unterscheiden.

CAtlServiceModuleT::m_dwThreadID

Membervariable, die den Threadbezeichner des Diensts speichert.

DWORD m_dwThreadID;

Hinweise

Diese Variable speichert den Threadbezeichner des aktuellen Threads.

CAtlServiceModuleT::m_hServiceStatus

Membervariable, die ein Handle in der Statusinformationsstruktur für den aktuellen Dienst speichert.

SERVICE_STATUS_HANDLE m_hServiceStatus;

Hinweise

Die SERVICE_STATUS-Struktur enthält Informationen zu einem Dienst.

CAtlServiceModuleT::m_status

Membervariable, die die Statusinformationsstruktur für den aktuellen Dienst speichert.

SERVICE_STATUS m_status;

Hinweise

Die SERVICE_STATUS-Struktur enthält Informationen zu einem Dienst.

CAtlServiceModuleT::m_szServiceName

Der Name des diensts, der registriert wird.

TCHAR [256] m_szServiceName;

Hinweise

Eine mit Null beendete Zeichenfolge, die den Namen des Diensts speichert.

CAtlServiceModuleT::OnContinue

Überschreiben Sie diese Methode, um den Dienst fortzusetzen.

void OnContinue() throw();

CAtlServiceModuleT::OnInterrogate

Überschreiben Sie diese Methode, um den Dienst abzufragen.

void OnInterrogate() throw();

CAtlServiceModuleT::OnPause

Überschreiben Sie diese Methode, um den Dienst anzuhalten.

void OnPause() throw();

CAtlServiceModulet::OnShutdown

Überschreiben Sie diese Methode, um den Dienst herunterzufahren.

void OnShutdown() throw();

CAtlServiceModuleT::OnStop

Überschreiben Sie diese Methode, um den Dienst zu beenden.

void OnStop() throw();

CAtlServiceModuleT::OnUnknownRequest

Überschreiben Sie diese Methode, um unbekannte Anforderungen an den Dienst zu verarbeiten.

void OnUnknownRequest(DWORD /* dwOpcode*/) throw();

Parameter

dwOpcode
Reserviert.

CAtlServiceModuleT::P arseCommandLine

Analysiert die Befehlszeile und führt bei Bedarf eine Registrierung durch.

bool ParseCommandLine(LPCTSTR lpCmdLine, HRESULT* pnRetCode) throw();

Parameter

lpCmdLine
Über die Befehlszeile.

pnRetCode
Das HRESULT, das der Registrierung entspricht (sofern die Registrierung erfolgt ist).

Rückgabewert

Gibt "true" für erfolg oder "false" zurück, wenn die in der Befehlszeile angegebene RGS-Datei nicht registriert werden konnte.

Hinweise

Analysiert die Befehlszeile und registriert oder hebt die Registrierung der bereitgestellten RGS-Datei bei Bedarf auf. Diese Methode ruft CAtlExeModuleT::P arseCommandLine auf, um nach /RegServer und /UnregServer zu suchen. Wenn Sie das Argument "-/Service " hinzufügen, wird der Dienst registriert.

CAtlServiceModuleT::P reMessageLoop

Diese Methode wird unmittelbar vor dem Eingeben der Nachrichtenschleife aufgerufen.

HRESULT PreMessageLoop(int nShowCmd) throw();

Parameter

nShowCmd
Dieser Parameter wird an CAtlExeModuleT::P reMessageLoop übergeben.

Rückgabewert

S_OK bei Erfolg, ein HRESULT-Fehler bei einem Fehlschlag.

Hinweise

Überschreiben Sie diese Methode, um benutzerdefinierten Initialisierungscode für den Dienst hinzuzufügen.

CAtlServiceModuleT::RegisterAppId

Registriert den Dienst in der Registrierung.

inline HRESULT RegisterAppId(bool bService = false) throw();

Parameter

bService
Muss wahr sein, um sich als Dienst zu registrieren.

Rückgabewert

S_OK bei Erfolg, ein HRESULT-Fehler bei einem Fehlschlag.

CAtlServiceModuleT::Run

Führt den Dienst aus.

HRESULT Run(int nShowCmd = SW_HIDE) throw();

Parameter

nShowCmd
Gibt an, wie das Fenster angezeigt werden soll. Dieser Parameter kann einer der werte sein, die im Abschnitt "WinMain " erläutert werden. Der Standardwert ist SW_HIDE.

Rückgabewert

S_OK bei Erfolg, ein HRESULT-Fehler bei einem Fehlschlag.

Hinweise

Ruft nach dem Aufruf Run CAtlServiceModuleT::P reMessageLoop, CAtlExeModuleT::RunMessageLoop und CAtlExeModuleT::P ostMessageLoop auf.

CAtlServiceModuleT::ServiceMain

Diese Methode wird vom Dienststeuerungs-Manager aufgerufen.

void ServiceMain(DWORD dwArgc, LPTSTR* lpszArgv) throw();

Parameter

dwArgc
Das Argument argc.

lpszArgv
Das Argument argument.

Hinweise

Der Dienststeuerungs-Manager (SCM) ruft aufServiceMain, wenn Sie die Dienstanwendung im Systemsteuerung öffnen, den Dienst auswählen und auf "Start" klicken.

Nach dem Aufrufen ServiceMaindes SCM muss ein Dienst dem SCM eine Handlerfunktion zuweisen. Mit dieser Funktion kann der SCM den Status des Diensts abrufen und bestimmte Anweisungen (z. B. anhalten oder beenden) übergeben. Anschließend wird CAtlServiceModuleT::Run aufgerufen, um die Hauptarbeit des Diensts auszuführen. Run wird weiterhin ausgeführt, bis der Dienst beendet wird.

CAtlServiceModuleT::SetServiceStatus

Diese Methode aktualisiert den Dienststatus.

void SetServiceStatus(DWORD dwState) throw();

Parameter

dwState
Der neue Status. Mögliche Werte finden Sie unter SetServiceStatus .

Hinweise

Aktualisiert die Statusinformationen des Dienststeuerungs-Managers für den Dienst. Sie wird von CAtlServiceModuleT::Run, CAtlServiceModuleT::ServiceMain und anderen Handlermethoden aufgerufen. Der Status wird auch in der Membervariable CAtlServiceModuleT::m_status gespeichert.

CAtlServiceModuleT::Start

Wird aufgerufen, wenn CAtlServiceModuleT::WinMain der Dienst gestartet wird.

HRESULT Start(int nShowCmd) throw();

Parameter

nShowCmd
Gibt an, wie das Fenster angezeigt werden soll. Dieser Parameter kann einer der werte sein, die im Abschnitt "WinMain " erläutert werden.

Rückgabewert

S_OK bei Erfolg, ein HRESULT-Fehler bei einem Fehlschlag.

Hinweise

Die CAtlServiceModuleT::WinMain-Methode behandelt sowohl Die Registrierung als auch die Installation sowie Aufgaben, die beim Entfernen von Registrierungseinträgen und beim Deinstallieren des Moduls erforderlich sind. Wenn der Dienst ausgeführt wird, WinMain wird aufgerufen Start.

CAtlServiceModuleT::Uninstall

Beendet und entfernt den Dienst.

BOOL Uninstall() throw();

Rückgabewert

Gibt WAHR für Erfolg, FALSE bei Fehler zurück.

Hinweise

Beendet die Ausführung des Diensts und entfernt ihn aus der Dienststeuerungs-Manager-Datenbank.

CAtlServiceModuleT::Unlock

Erhöht die Sperranzahl des Diensts.

LONG Unlock() throw();

Rückgabewert

Gibt die Sperranzahl zurück, die für Diagnose und Debugging nützlich sein kann.

CAtlServiceModuleT::UnregisterAppId

Entfernt den Dienst aus der Registrierung.

HRESULT UnregisterAppId() throw();

Rückgabewert

S_OK bei Erfolg, ein HRESULT-Fehler bei einem Fehlschlag.

CAtlServiceModuleT::WinMain

Diese Methode implementiert den Code, der zum Starten des Diensts erforderlich ist.

int WinMain(int nShowCmd) throw();

Parameter

nShowCmd
Gibt an, wie das Fenster angezeigt werden soll. Dieser Parameter kann einer der werte sein, die im Abschnitt "WinMain " erläutert werden.

Rückgabewert

Gibt den Rückgabewert des Diensts zurück.

Hinweise

Diese Methode verarbeitet die Befehlszeile (mit CAtlServiceModuleT::P arseCommandLine) und startet dann den Dienst (mit CAtlServiceModuleT::Start).

Siehe auch

CAtlExeModuleT-Klasse
Klassenübersicht