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
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 ServiceMain
des 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).