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
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í ServiceMain
SCM 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).