Sdílet prostřednictvím


CAtlServiceModuleT – třída

Tato třída implementuje službu.

Důležité

Tuto třídu a její členy nelze použít v aplikacích, které se spouští v prostředí Windows Runtime.

Syntaxe

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

Parametry

T
Vaše třída odvozená z CAtlServiceModuleT.

nServiceNameID
Identifikátor prostředku služby.

Členové

Veřejné konstruktory

Název Popis
CAtlServiceModuleT::CAtlServiceModuleT Konstruktor

Veřejné metody

Název Popis
CAtlServiceModuleT::Handler Rutina obslužné rutiny pro službu.
CAtlServiceModuleT::InitializeSecurity Poskytuje výchozí nastavení zabezpečení pro službu.
CAtlServiceModuleT::Install Nainstaluje a vytvoří službu.
CAtlServiceModuleT::IsInstalled Potvrdí, že je služba nainstalovaná.
CAtlServiceModuleT::LogEvent Zapíše do protokolu událostí.
CAtlServiceModuleT::OnContinue Tuto metodu přepište, aby služba pokračovala.
CAtlServiceModulet::OnInterrogate Přepsat tuto metodu pro interrogate služby.
CAtlServiceModulet::OnPause Tuto metodu přepište, aby se služba pozastavila.
CAtlServiceModuleT::OnShutdown Přepsat tuto metodu, aby se služba vypnula.
CAtlServiceModulet::Onstop Přepsat tuto metodu pro zastavení služby
CAtlServiceModuleT::OnUnknownRequest Přepsat tuto metodu pro zpracování neznámých požadavků do služby
CAtlServiceModuleT::P arseCommandLine Parsuje příkazový řádek a v případě potřeby provede registraci.
CAtlServiceModuleT::P reMessageLoop Tato metoda se volá bezprostředně před zadáním smyčky zprávy.
CAtlServiceModuleT::RegisterAppId Zaregistruje službu v registru.
CAtlServiceModuleT::Run Spustí službu.
CAtlServiceModuleT::ServiceMain Metoda volaná správcem řízení služeb.
CAtlServiceModuleT::SetServiceStatus Aktualizuje stav služby.
CAtlServiceModuleT::Start Volá se CAtlServiceModuleT::WinMain při spuštění služby.
CAtlServiceModuleT::Uninstall Zastaví a odebere službu.
CAtlServiceModuleT::Unlock Sníží počet zámků služby.
CAtlServiceModuleT::UnregisterAppId Odebere službu z registru.
CAtlServiceModuleT::WinMain Tato metoda implementuje kód potřebný ke spuštění služby.

Veřejné datové členy

Název Popis
CAtlServiceModuleT::m_bService Příznak označující, že program běží jako služba.
CAtlServiceModuleT::m_dwThreadID Členské proměnné ukládající identifikátor vlákna.
CAtlServiceModuleT::m_hServiceStatus Členské proměnné ukládající popisovač do struktury informací o stavu pro aktuální službu.
CAtlServiceModuleT::m_status Členské proměnné ukládající strukturu informací o stavu pro aktuální službu.
CAtlServiceModuleT::m_szServiceName Název zaregistrované služby.

Poznámky

CAtlServiceModuleT, odvozené od CAtlExeModuleT, implementuje modul ATL Service. CAtlServiceModuleT poskytuje metody pro zpracování, instalaci, registraci a odebrání příkazového řádku. Pokud je vyžadována další funkce, je možné tyto a další metody přepsat.

Tato třída nahrazuje zastaralou třídu CComModule použitou v dřívějších verzích KNIHOVNY ATL. Další podrobnosti najdete v třídách modulů ATL.

Hierarchie dědičnosti

_ATL_MODULE

CAtlModule

CAtlModuleT

CAtlExeModuleT

CAtlServiceModuleT

Požadavky

Hlavička: atlbase.h

CAtlServiceModuleT::CAtlServiceModuleT

Konstruktor

CAtlServiceModuleT() throw();

Poznámky

Inicializuje datové členy a nastaví počáteční stav služby.

CAtlServiceModuleT::Handler

Rutina obslužné rutiny pro službu.

void Handler(DWORD dwOpcode) throw();

Parametry

dwOpcode
Přepínač, který definuje operaci obslužné rutiny. Podrobnosti najdete v poznámkách.

Poznámky

Toto je kód, který správce řízení služeb (SCM) volá za účelem načtení stavu služby a vydávání pokynů, jako je zastavení nebo pozastavení. SCM předá kód operace, který ukazuje, Handler co má služba dělat.

Operační kód Význam
SERVICE_CONTROL_STOP Zastaví službu. Přepsat metodu CAtlServiceModuleT::OnStop v atlbase.h změnit chování.
SERVICE_CONTROL_PAUSE Uživatel byl implementován. Přepište prázdnou metodu CAtlServiceModuleT::OnPause v atlbase.h, aby se služba pozastavila.
SERVICE_CONTROL_CONTINUE Uživatel byl implementován. Přepište prázdnou metodu CAtlServiceModuleT::OnContinue v atlbase.h a pokračujte ve službě.
SERVICE_CONTROL_INTERROGATE Uživatel byl implementován. Přepište prázdnou metodu CAtlServiceModuleT::OnInterrogate v atlbase.h pro interrogate služby.
SERVICE_CONTROL_SHUTDOWN Uživatel byl implementován. Přepište prázdnou metodu CAtlServiceModuleT::OnShutdown v atlbase.h pro vypnutí služby.

Pokud není rozpoznán kód operace, volá se metoda CAtlServiceModuleT::OnUnknownRequest .

Výchozí služba vygenerovaná ATL zpracovává pouze instrukce zastavení. Pokud SCM předá pokyn k zastavení, služba řekne SCM, že se program chystá zastavit. Služba pak zavolá PostThreadMessage , aby posílala zprávu o ukončení sama sobě. Tím se ukončí smyčka zpráv a služba se nakonec zavře.

CAtlServiceModuleT::InitializeSecurity

Poskytuje výchozí nastavení zabezpečení pro službu.

HRESULT InitializeSecurity() throw();

Návratová hodnota

Vrátí S_OK při úspěchu nebo chybu HRESULT při selhání.

Poznámky

Každá třída, která je odvozena od CAtlServiceModuleT musí implementovat tuto metodu v odvozené třídě.

Použijte ověřování na úrovni PKT, úroveň zosobnění RPC_C_IMP_LEVEL_IDENTIFY a odpovídající popisovač zabezpečení bez hodnoty null ve volání CoInitializeSecurity.

U projektů služby generovaných průvodcem, které nejsou vygenerované, by to bylo v

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;
   }
};

U projektů služeb s atributy by to bylo v

[ 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

Nainstaluje a vytvoří službu.

BOOL Install() throw();

Návratová hodnota

Vrátí hodnotu PRAVDA při úspěchu, NEPRAVDA při selhání.

Poznámky

Nainstaluje službu do databáze Správce řízení služeb (SCM) a pak vytvoří objekt služby. Pokud službu nelze vytvořit, zobrazí se okno se zprávou a metoda vrátí hodnotu FALSE.

CAtlServiceModuleT::IsInstalled

Potvrdí, že je služba nainstalovaná.

BOOL IsInstalled() throw();

Návratová hodnota

Vrátí hodnotu TRUE, pokud je služba nainstalována, jinak NEPRAVDA.

CAtlServiceModuleT::LogEvent

Zapíše do protokolu událostí.

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

Parametry

pszFormat
Řetězec pro zápis do protokolu událostí.

...
Volitelné nadbytečné řetězce, které se mají zapsat do protokolu událostí.

Poznámky

Tato metoda zapíše podrobnosti do protokolu událostí pomocí funkce ReportEvent. Pokud není spuštěná žádná služba, řetězec se odešle do konzoly.

CAtlServiceModuleT::m_bService

Příznak označující, že program běží jako služba.

BOOL m_bService;

Poznámky

Používá se k rozlišení service EXE od application EXE.

CAtlServiceModuleT::m_dwThreadID

Členské proměnné ukládající identifikátor vlákna služby.

DWORD m_dwThreadID;

Poznámky

Tato proměnná ukládá identifikátor vlákna aktuálního vlákna.

CAtlServiceModuleT::m_hServiceStatus

Členské proměnné ukládající popisovač do struktury informací o stavu pro aktuální službu.

SERVICE_STATUS_HANDLE m_hServiceStatus;

Poznámky

Struktura SERVICE_STATUS obsahuje informace o službě.

CAtlServiceModuleT::m_status

Členské proměnné ukládající strukturu informací o stavu pro aktuální službu.

SERVICE_STATUS m_status;

Poznámky

Struktura SERVICE_STATUS obsahuje informace o službě.

CAtlServiceModuleT::m_szServiceName

Název zaregistrované služby.

TCHAR [256] m_szServiceName;

Poznámky

Řetězec ukončený hodnotou null, který ukládá název služby.

CAtlServiceModuleT::OnContinue

Tuto metodu přepište, aby služba pokračovala.

void OnContinue() throw();

CAtlServiceModulet::OnInterrogate

Přepsat tuto metodu pro interrogate služby.

void OnInterrogate() throw();

CAtlServiceModulet::OnPause

Tuto metodu přepište, aby se služba pozastavila.

void OnPause() throw();

CAtlServiceModuleT::OnShutdown

Tuto metodu přepište tak, aby se služba vypnula.

void OnShutdown() throw();

CAtlServiceModulet::Onstop

Tuto metodu přepište, aby se služba zastavila.

void OnStop() throw();

CAtlServiceModuleT::OnUnknownRequest

Tuto metodu přepište tak, aby zpracovávala neznámé požadavky na službu.

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

Parametry

dwOpcode
Vyhrazeno.

CAtlServiceModuleT::P arseCommandLine

Parsuje příkazový řádek a v případě potřeby provede registraci.

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

Parametry

lpCmdLine
Příkazový řádek.

pnRetCode
HRESULT odpovídající registraci (pokud proběhlo).

Návratová hodnota

Vrátí hodnotu true při úspěchu nebo false, pokud soubor RGS zadaný v příkazovém řádku nelze zaregistrovat.

Poznámky

V případě potřeby analyzuje příkazový řádek a zaregistruje nebo zruší registraci zadaného souboru RGS. Tato metoda volá CAtlExeModuleT::P arseCommandLine pro kontrolu /RegServer a /UnregServer. Přidání argumentu -/Service zaregistruje službu.

CAtlServiceModuleT::P reMessageLoop

Tato metoda se volá bezprostředně před zadáním smyčky zprávy.

HRESULT PreMessageLoop(int nShowCmd) throw();

Parametry

nShowCmd
Tento parametr se předává CAtlExeModuleT ::P reMessageLoop.

Návratová hodnota

Vrátí S_OK při úspěchu nebo chybu HRESULT při selhání.

Poznámky

Přepište tuto metodu pro přidání vlastního inicializačního kódu pro službu.

CAtlServiceModuleT::RegisterAppId

Zaregistruje službu v registru.

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

Parametry

bService
Aby se služba zaregistrovala jako služba, musí být pravdivá.

Návratová hodnota

Vrátí S_OK při úspěchu nebo chybu HRESULT při selhání.

CAtlServiceModuleT::Run

Spustí službu.

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

Parametry

nShowCmd
Určuje způsob zobrazení okna. Tento parametr může být jednou z hodnot probíraných v části WinMain . Výchozí hodnota je SW_HIDE.

Návratová hodnota

Vrátí S_OK při úspěchu nebo chybu HRESULT při selhání.

Poznámky

Po volání volání Run CAtlServiceModuleT::P reMessageLoop, CAtlExeModuleT::RunMessageLoop a CAtlExeModuleT::P ostMessageLoop.

CAtlServiceModuleT::ServiceMain

Tato metoda je volána správcem řízení služeb.

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

Parametry

dwArgc
Argument argc.

lpszArgv
Argument argv.

Poznámky

Volání Správce řízení služeb (SCM) ServiceMain při otevření aplikace Služby v Ovládací panely, vyberte službu a klepněte na tlačítko Start.

Po volání ServiceMainSCM musí služba dát SCM funkci obslužné rutiny. Tato funkce umožňuje SCM získat stav služby a předat konkrétní pokyny (například pozastavení nebo zastavení). Následně se zavolá CAtlServiceModuleT::Run, který provede hlavní práci služby. Run bude pokračovat v provádění, dokud se služba nezastaví.

CAtlServiceModuleT::SetServiceStatus

Tato metoda aktualizuje stav služby.

void SetServiceStatus(DWORD dwState) throw();

Parametry

dwState
Nový stav. Možné hodnoty najdete v tématu SetServiceStatus .

Poznámky

Aktualizuje informace o stavu správce řízení služeb pro službu. Je volána CAtlServiceModuleT ::Run, CAtlServiceModuleT::ServiceMain a dalšími metodami obslužné rutiny. Stav je také uložen v členské proměnné CAtlServiceModuleT::m_status.

CAtlServiceModuleT::Start

Volá se CAtlServiceModuleT::WinMain při spuštění služby.

HRESULT Start(int nShowCmd) throw();

Parametry

nShowCmd
Určuje způsob zobrazení okna. Tento parametr může být jednou z hodnot probíraných v části WinMain .

Návratová hodnota

Vrátí S_OK při úspěchu nebo chybu HRESULT při selhání.

Poznámky

Metoda CAtlServiceModuleT::WinMain zpracovává registraci i instalaci a také úlohy související s odebráním položek registru a odinstalací modulu. Při spuštění WinMain služby volá Start.

CAtlServiceModuleT::Uninstall

Zastaví a odebere službu.

BOOL Uninstall() throw();

Návratová hodnota

Vrátí hodnotu PRAVDA při úspěchu, NEPRAVDA při selhání.

Poznámky

Zastaví spuštění služby a odebere ji z databáze Správce řízení služeb.

CAtlServiceModuleT::Unlock

Sníží počet zámků služby.

LONG Unlock() throw();

Návratová hodnota

Vrátí počet zámků, který může být užitečný pro diagnostiku a ladění.

CAtlServiceModuleT::UnregisterAppId

Odebere službu z registru.

HRESULT UnregisterAppId() throw();

Návratová hodnota

Vrátí S_OK při úspěchu nebo chybu HRESULT při selhání.

CAtlServiceModuleT::WinMain

Tato metoda implementuje kód potřebný ke spuštění služby.

int WinMain(int nShowCmd) throw();

Parametry

nShowCmd
Určuje způsob zobrazení okna. Tento parametr může být jednou z hodnot probíraných v části WinMain .

Návratová hodnota

Vrátí návratovou hodnotu služby.

Poznámky

Tato metoda zpracuje příkazový řádek (pomocí CAtlServiceModuleT::P arseCommandLine) a pak spustí službu (pomocí CAtlServiceModuleT::Start).

Viz také

CAtlExeModuleT – třída
Přehled třídy