Udostępnij za pośrednictwem


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

_ATL_MODULE

CAtlModule

CAtlModuleT

CAtlExeModuleT

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 ServiceMainSCM 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).

Zobacz też

Klasa CAtlExeModuleT
Omówienie klasy