Klasa CAtlServiceModuleT
Ta klasa implementuje usługę.
Ważne
Tej klasy i jej składowych nie można używać w aplikacjach wykonywanych w środowisko wykonawcze systemu Windows.
Składnia
template <class T, UINT nServiceNameID>
class ATL_NO_VTABLE CAtlServiceModuleT : public CAtlExeModuleT<T>
Parametry
T
Klasa pochodzi z klasy CAtlServiceModuleT
.
nServiceNameID
Identyfikator zasobu usługi.
Elementy członkowskie
Konstruktory publiczne
Nazwa/nazwisko | opis |
---|---|
CAtlServiceModuleT::CAtlServiceModuleT | Konstruktor. |
Metody publiczne
Nazwa/nazwisko | opis |
---|---|
CAtlServiceModuleT::Handler | Procedura obsługi dla usługi. |
CAtlServiceModuleT::InitializeSecurity | Udostępnia domyślne ustawienia zabezpieczeń usługi. |
CAtlServiceModuleT::Install | Instaluje i tworzy usługę. |
CAtlServiceModuleT::IsInstalled | Potwierdza, że usługa została zainstalowana. |
CAtlServiceModuleT::LogEvent | Zapisuje w dzienniku zdarzeń. |
CAtlServiceModuleT::OnContinue | Zastąpij tę metodę, aby kontynuować usługę. |
CAtlServiceModuleT::OnInterrogate | Zastąpij tę metodę, aby przesłuchić usługę. |
CAtlServiceModuleT::OnPause | Zastąpij tę metodę, aby wstrzymać usługę. |
CAtlServiceModuleT::OnShutdown | Zastąpij tę metodę, aby zamknąć usługę |
CAtlServiceModuleT::OnStop | Zastąpij tę metodę, aby zatrzymać usługę |
CAtlServiceModuleT::OnUnknownRequest | Zastąpij tę metodę do obsługi nieznanych żądań do usługi |
CAtlServiceModuleT::P arseCommandLine | Analizuje wiersz polecenia i wykonuje rejestrację w razie potrzeby. |
CAtlServiceModuleT::P reMessageLoop | Ta metoda jest wywoływana bezpośrednio przed wprowadzeniem pętli komunikatów. |
CAtlServiceModuleT::RegisterAppId | Rejestruje usługę w rejestrze. |
CAtlServiceModuleT::Run | Uruchamia usługę. |
CAtlServiceModuleT::ServiceMain | Metoda wywoływana przez program Service Control Manager. |
CAtlServiceModuleT::SetServiceStatus | Aktualizuje stan usługi. |
CAtlServiceModuleT::Start | Wywoływane przez CAtlServiceModuleT::WinMain po uruchomieniu usługi. |
CAtlServiceModuleT::Uninstall | Zatrzymuje i usuwa usługę. |
CAtlServiceModuleT::Unlock | Dekrementuje liczbę blokad usługi. |
CAtlServiceModuleT::UnregisterAppId | Usuwa usługę z rejestru. |
CAtlServiceModuleT::WinMain | Ta metoda implementuje kod wymagany do uruchomienia usługi. |
Publiczne elementy członkowskie danych
Nazwa/nazwisko | opis |
---|---|
CAtlServiceModuleT::m_bService | Flaga wskazująca, że program jest uruchomiony jako usługa. |
CAtlServiceModuleT::m_dwThreadID | Zmienna składowa przechowującą identyfikator wątku. |
CAtlServiceModuleT::m_hServiceStatus | Zmienna składowa przechowując uchwyt do struktury informacji o stanie dla bieżącej usługi. |
CAtlServiceModuleT::m_status | Zmienna składowa przechowującą strukturę informacji o stanie dla bieżącej usługi. |
CAtlServiceModuleT::m_szServiceName | Nazwa zarejestrowanej usługi. |
Uwagi
CAtlServiceModuleT
, pochodzący z klasy CAtlExeModuleT, implementuje moduł usługi ATL. CAtlServiceModuleT
Udostępnia metody przetwarzania wiersza polecenia, instalacji, rejestrowania i usuwania. Jeśli wymagana jest dodatkowa funkcjonalność, można zastąpić te i inne metody.
Ta klasa zastępuje przestarzałą klasę CComModule używaną we wcześniejszych wersjach atl. Aby uzyskać więcej informacji, zobacz Klasy modułów ATL.
Hierarchia dziedziczenia
CAtlServiceModuleT
Wymagania
Nagłówek: atlbase.h
CAtlServiceModuleT::CAtlServiceModuleT
Konstruktor.
CAtlServiceModuleT() throw();
Uwagi
Inicjuje składowe danych i ustawia stan początkowej usługi.
CAtlServiceModuleT::Handler
Procedura obsługi dla usługi.
void Handler(DWORD dwOpcode) throw();
Parametry
dwOpcode
Przełącznik definiujący operację obsługi. Aby uzyskać szczegółowe informacje, zobacz uwagi.
Uwagi
Jest to kod, który program Service Control Manager (SCM) wywołuje w celu pobrania stanu usługi i instrukcji dotyczących wystawiania, takich jak zatrzymywanie lub wstrzymywanie. Narzędzie SCM przekazuje kod operacji pokazany poniżej, aby wskazać Handler
, co usługa powinna zrobić.
Kod operacji | Znaczenie |
---|---|
SERVICE_CONTROL_STOP | Zatrzymuje usługę. Zastąpuj metodę CAtlServiceModuleT::OnStop w pliku atlbase.h, aby zmienić zachowanie. |
SERVICE_CONTROL_PAUSE | Zaimplementowano użytkownika. Zastąp pustą metodę CAtlServiceModuleT::OnPause w pliku atlbase.h, aby wstrzymać usługę. |
SERVICE_CONTROL_CONTINUE | Zaimplementowano użytkownika. Zastąpuj pustą metodę CAtlServiceModuleT::OnContinue w pliku atlbase.h, aby kontynuować usługę. |
SERVICE_CONTROL_INTERROGATE | Zaimplementowano użytkownika. Zastąpuj pustą metodę CAtlServiceModuleT::OnInterrogate w pliku atlbase.h, aby przesłuchiwać usługę. |
SERVICE_CONTROL_SHUTDOWN | Zaimplementowano użytkownika. Zastąpuj pustą metodę CAtlServiceModuleT::OnShutdown w pliku atlbase.h, aby zamknąć usługę. |
Jeśli kod operacji nie jest rozpoznawany, wywoływana jest metoda CAtlServiceModuleT::OnUnknownRequest .
Domyślna usługa wygenerowana przez atl obsługuje tylko instrukcję zatrzymania. Jeśli SCM przekazuje instrukcję zatrzymania, usługa informuje SCM, że program ma się zatrzymać. Następnie usługa wywołuje polecenie PostThreadMessage
, aby opublikować komunikat zakończenia do samego siebie. Spowoduje to zakończenie pętli komunikatów, a usługa zostanie ostatecznie zamknięta.
CAtlServiceModuleT::InitializeSecurity
Udostępnia domyślne ustawienia zabezpieczeń usługi.
HRESULT InitializeSecurity() throw();
Wartość zwracana
Zwraca S_OK powodzenia lub błąd HRESULT w przypadku niepowodzenia.
Uwagi
Każda klasa pochodząca z CAtlServiceModuleT
klasy musi zaimplementować tę metodę w klasie pochodnej.
Użyj uwierzytelniania na poziomie pkt, poziomu personifikacji RPC_C_IMP_LEVEL_IDENTIFY i odpowiedniego deskryptora zabezpieczeń innego niż null w wywołaniu metody CoInitializeSecurity
.
W przypadku projektów usług generowanych przez kreatora, które nie są przypisywane, będzie to miało wartość w
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;
}
};
W przypadku projektów usługi przypisanych będzie to miało wartość w
[ 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
Instaluje i tworzy usługę.
BOOL Install() throw();
Wartość zwracana
Zwraca wartość TRUE w przypadku powodzenia, FALSE w przypadku niepowodzenia.
Uwagi
Instaluje usługę w bazie danych programu Service Control Manager (SCM), a następnie tworzy obiekt usługi. Jeśli nie można utworzyć usługi, zostanie wyświetlone pole komunikatu, a metoda zwróci wartość FALSE.
CAtlServiceModuleT::IsInstalled
Potwierdza, że usługa została zainstalowana.
BOOL IsInstalled() throw();
Wartość zwracana
Zwraca wartość TRUE, jeśli usługa jest zainstalowana, w przeciwnym razie wartość FALSE.
CAtlServiceModuleT::LogEvent
Zapisuje w dzienniku zdarzeń.
void __cdecl LogEvent(LPCTSTR pszFormat, ...) throw();
Parametry
pszFormat
Ciąg do zapisu w dzienniku zdarzeń.
...
Opcjonalne dodatkowe ciągi, które mają być zapisywane w dzienniku zdarzeń.
Uwagi
Ta metoda zapisuje szczegóły w dzienniku zdarzeń przy użyciu funkcji ReportEvent. Jeśli żadna usługa nie jest uruchomiona, ciąg zostanie wysłany do konsoli programu .
CAtlServiceModuleT::m_bService
Flaga wskazująca, że program jest uruchomiony jako usługa.
BOOL m_bService;
Uwagi
Służy do odróżnienia pliku EXE usługi od pliku EXE aplikacji.
CAtlServiceModuleT::m_dwThreadID
Zmienna składowa przechowującą identyfikator wątku usługi.
DWORD m_dwThreadID;
Uwagi
Ta zmienna przechowuje identyfikator wątku bieżącego wątku.
CAtlServiceModuleT::m_hServiceStatus
Zmienna składowa przechowując uchwyt do struktury informacji o stanie dla bieżącej usługi.
SERVICE_STATUS_HANDLE m_hServiceStatus;
Uwagi
Struktura SERVICE_STATUS zawiera informacje o usłudze.
CAtlServiceModuleT::m_status
Zmienna składowa przechowującą strukturę informacji o stanie dla bieżącej usługi.
SERVICE_STATUS m_status;
Uwagi
Struktura SERVICE_STATUS zawiera informacje o usłudze.
CAtlServiceModuleT::m_szServiceName
Nazwa zarejestrowanej usługi.
TCHAR [256] m_szServiceName;
Uwagi
Ciąg zakończony wartością null, który przechowuje nazwę usługi.
CAtlServiceModuleT::OnContinue
Zastąpij tę metodę, aby kontynuować usługę.
void OnContinue() throw();
CAtlServiceModuleT::OnInterrogate
Zastąpij tę metodę, aby przesłuchić usługę.
void OnInterrogate() throw();
CAtlServiceModuleT::OnPause
Zastąpij tę metodę, aby wstrzymać usługę.
void OnPause() throw();
CAtlServiceModuleT::OnShutdown
Zastąpij tę metodę, aby zamknąć usługę.
void OnShutdown() throw();
CAtlServiceModuleT::OnStop
Zastąpi tę metodę, aby zatrzymać usługę.
void OnStop() throw();
CAtlServiceModuleT::OnUnknownRequest
Zastąpi tę metodę do obsługi nieznanych żądań do usługi.
void OnUnknownRequest(DWORD /* dwOpcode*/) throw();
Parametry
dwOpcode
Zarezerwowany.
CAtlServiceModuleT::P arseCommandLine
Analizuje wiersz polecenia i wykonuje rejestrację w razie potrzeby.
bool ParseCommandLine(LPCTSTR lpCmdLine, HRESULT* pnRetCode) throw();
Parametry
lpCmdLine
Wiersz polecenia.
pnRetCode
HRESULT odpowiadający rejestracji (jeśli miało to miejsce).
Wartość zwracana
Zwraca wartość true w przypadku powodzenia lub false, jeśli nie można zarejestrować pliku RGS podanego w wierszu polecenia.
Uwagi
Analizuje wiersz polecenia i rejestruje lub wyrejestrowuje podany plik RGS w razie potrzeby. Ta metoda wywołuje metodę CAtlExeModuleT::P arseCommandLine , aby sprawdzić /RegServer i /UnregServer. Dodanie argumentu -/Usługa spowoduje zarejestrowanie usługi.
CAtlServiceModuleT::P reMessageLoop
Ta metoda jest wywoływana bezpośrednio przed wprowadzeniem pętli komunikatów.
HRESULT PreMessageLoop(int nShowCmd) throw();
Parametry
nShowCmd
Ten parametr jest przekazywany do obiektu CAtlExeModuleT::P reMessageLoop.
Wartość zwracana
Zwraca S_OK powodzenia lub błąd HRESULT w przypadku niepowodzenia.
Uwagi
Zastąpij tę metodę, aby dodać niestandardowy kod inicjowania usługi.
CAtlServiceModuleT::RegisterAppId
Rejestruje usługę w rejestrze.
inline HRESULT RegisterAppId(bool bService = false) throw();
Parametry
bService
Musi być prawdziwe, aby zarejestrować się jako usługa.
Wartość zwracana
Zwraca S_OK powodzenia lub błąd HRESULT w przypadku niepowodzenia.
CAtlServiceModuleT::Run
Uruchamia usługę.
HRESULT Run(int nShowCmd = SW_HIDE) throw();
Parametry
nShowCmd
Określa sposób wyświetlania okna. Ten parametr może być jedną z wartości omówionych w sekcji WinMain . Wartość domyślna to SW_HIDE.
Wartość zwracana
Zwraca S_OK powodzenia lub błąd HRESULT w przypadku niepowodzenia.
Uwagi
Po wywołaniu Run
wywołania wywołania metody CAtlServiceModuleT::P reMessageLoop, CAtlExeModuleT::RunMessageLoop i CAtlExeModuleT::P ostMessageLoop.
CAtlServiceModuleT::ServiceMain
Ta metoda jest wywoływana przez menedżera kontroli usług.
void ServiceMain(DWORD dwArgc, LPTSTR* lpszArgv) throw();
Parametry
dwArgc
Argument argc.
lpszArgv
Argument argv.
Uwagi
Program Service Control Manager (SCM) wywołuje wywołania ServiceMain
po otwarciu aplikacji Usługi w Panel sterowania, wybraniu usługi i kliknięciu przycisku Uruchom.
Po wywołaniu ServiceMain
SCM usługa musi nadać SCM funkcję obsługi. Ta funkcja umożliwia SCM uzyskanie stanu usługi i przekazanie określonych instrukcji (takich jak wstrzymanie lub zatrzymywanie). Następnie polecenie CAtlServiceModuleT::Run jest wywoływane w celu wykonania głównej pracy usługi. Run
kontynuuje wykonywanie, dopóki usługa nie zostanie zatrzymana.
CAtlServiceModuleT::SetServiceStatus
Ta metoda aktualizuje stan usługi.
void SetServiceStatus(DWORD dwState) throw();
Parametry
dwState
Nowy stan. Zobacz SetServiceStatus, aby uzyskać możliwe wartości.
Uwagi
Aktualizuje informacje o stanie programu Service Control Manager dla usługi. Jest wywoływana przez CAtlServiceModuleT::Run, CAtlServiceModuleT::ServiceMain i inne metody obsługi. Stan jest również przechowywany w zmiennej składowej CAtlServiceModuleT::m_status.
CAtlServiceModuleT::Start
Wywoływane przez CAtlServiceModuleT::WinMain
po uruchomieniu usługi.
HRESULT Start(int nShowCmd) throw();
Parametry
nShowCmd
Określa sposób wyświetlania okna. Ten parametr może być jedną z wartości omówionych w sekcji WinMain .
Wartość zwracana
Zwraca S_OK powodzenia lub błąd HRESULT w przypadku niepowodzenia.
Uwagi
Metoda CAtlServiceModuleT::WinMain obsługuje zarówno rejestrację, jak i instalację, a także zadania związane z usuwaniem wpisów rejestru i odinstalowywaniem modułu. Po uruchomieniu WinMain
usługi wywołuje metodę Start
.
CAtlServiceModuleT::Uninstall
Zatrzymuje i usuwa usługę.
BOOL Uninstall() throw();
Wartość zwracana
Zwraca wartość TRUE w przypadku powodzenia, FALSE w przypadku niepowodzenia.
Uwagi
Zatrzymuje działanie usługi i usuwa ją z bazy danych programu Service Control Manager.
CAtlServiceModuleT::Unlock
Dekrementuje liczbę blokad usługi.
LONG Unlock() throw();
Wartość zwracana
Zwraca liczbę blokad, co może być przydatne w przypadku diagnostyki i debugowania.
CAtlServiceModuleT::UnregisterAppId
Usuwa usługę z rejestru.
HRESULT UnregisterAppId() throw();
Wartość zwracana
Zwraca S_OK powodzenia lub błąd HRESULT w przypadku niepowodzenia.
CAtlServiceModuleT::WinMain
Ta metoda implementuje kod wymagany do uruchomienia usługi.
int WinMain(int nShowCmd) throw();
Parametry
nShowCmd
Określa sposób wyświetlania okna. Ten parametr może być jedną z wartości omówionych w sekcji WinMain .
Wartość zwracana
Zwraca wartość zwracaną przez usługę.
Uwagi
Ta metoda przetwarza wiersz polecenia (z CAtlServiceModuleT::P arseCommandLine), a następnie uruchamia usługę (przy użyciu CAtlServiceModuleT::Start).