Kelas CAtlServiceModuleT
Kelas ini menerapkan layanan.
Penting
Kelas ini dan anggotanya tidak dapat digunakan dalam aplikasi yang dijalankan di Windows Runtime.
Sintaks
template <class T, UINT nServiceNameID>
class ATL_NO_VTABLE CAtlServiceModuleT : public CAtlExeModuleT<T>
Parameter
T
Kelas Anda berasal dari CAtlServiceModuleT
.
nServiceNameID
Pengidentifikasi sumber daya layanan.
Anggota
Konstruktor Publik
Nama | Deskripsi |
---|---|
CAtlServiceModuleT::CAtlServiceModuleT | Konstruktor. |
Metode Publik
Nama | Deskripsi |
---|---|
CAtlServiceModuleT::Handler | Rutinitas handler untuk layanan. |
CAtlServiceModuleT::InitializeSecurity | Menyediakan pengaturan keamanan default untuk layanan. |
CAtlServiceModuleT::Install | Menginstal dan membuat layanan. |
CAtlServiceModuleT::IsInstalled | Mengonfirmasi bahwa layanan telah diinstal. |
CAtlServiceModuleT::LogEvent | Menulis ke log peristiwa. |
CAtlServiceModuleT::OnContinue | Ambil alih metode ini untuk melanjutkan layanan. |
CAtlServiceModuleT::OnInterrogate | Ambil alih metode ini untuk menginterogasi layanan. |
CAtlServiceModuleT::OnPause | Ambil alih metode ini untuk menjeda layanan. |
CAtlServiceModuleT::OnShutdown | Ambil alih metode ini untuk mematikan layanan |
CAtlServiceModuleT::OnStop | Ambil alih metode ini untuk menghentikan layanan |
CAtlServiceModuleT::OnUnknownRequest | Ambil alih metode ini untuk menangani permintaan yang tidak diketahui ke layanan |
CAtlServiceModuleT::P arseCommandLine | Mengurai baris perintah dan melakukan pendaftaran jika perlu. |
CAtlServiceModuleT::P reMessageLoop | Metode ini dipanggil segera sebelum memasukkan perulangan pesan. |
CAtlServiceModuleT::RegisterAppId | Mendaftarkan layanan di registri. |
CAtlServiceModuleT::Run | Menjalankan layanan. |
CAtlServiceModuleT::ServiceMain | Metode yang dipanggil oleh Service Control Manager. |
CAtlServiceModuleT::SetServiceStatus | Memperbarui status layanan. |
CAtlServiceModuleT::Start | Dipanggil oleh CAtlServiceModuleT::WinMain ketika layanan dimulai. |
CAtlServiceModuleT::Uninstall | Menghentikan dan menghapus layanan. |
CAtlServiceModuleT::Unlock | Mengurangi jumlah kunci layanan. |
CAtlServiceModuleT::UnregisterAppId | Menghapus layanan dari registri. |
CAtlServiceModuleT::WinMain | Metode ini mengimplementasikan kode yang diperlukan untuk menjalankan layanan. |
Anggota Data Publik
Nama | Deskripsi |
---|---|
CAtlServiceModuleT::m_bService | Bendera yang menunjukkan program berjalan sebagai layanan. |
CAtlServiceModuleT::m_dwThreadID | Variabel anggota menyimpan pengidentifikasi utas. |
CAtlServiceModuleT::m_hServiceStatus | Variabel anggota menyimpan handel ke struktur informasi status untuk layanan saat ini. |
CAtlServiceModuleT::m_status | Variabel anggota yang menyimpan struktur informasi status untuk layanan saat ini. |
CAtlServiceModuleT::m_szServiceName | Nama layanan yang didaftarkan. |
Keterangan
CAtlServiceModuleT
, berasal dari CAtlExeModuleT, mengimplementasikan modul Layanan ATL. CAtlServiceModuleT
menyediakan metode untuk pemrosesan baris perintah, penginstalan, pendaftaran, dan penghapusan. Jika fungsionalitas tambahan diperlukan, metode ini dan metode lain dapat ditimpa.
Kelas ini menggantikan Kelas CComModule usang yang digunakan dalam versi ATL yang lebih lama. Lihat Kelas Modul ATL untuk detail selengkapnya.
Hierarki Warisan
CAtlServiceModuleT
Persyaratan
Header: atlbase.h
CAtlServiceModuleT::CAtlServiceModuleT
Konstruktor.
CAtlServiceModuleT() throw();
Keterangan
Menginisialisasi anggota data dan mengatur status layanan awal.
CAtlServiceModuleT::Handler
Rutinitas handler untuk layanan.
void Handler(DWORD dwOpcode) throw();
Parameter
dwOpcode
Sakelar yang menentukan operasi handler. Untuk detailnya, lihat Komentar.
Keterangan
Ini adalah kode yang dipanggil Service Control Manager (SCM) untuk mengambil status layanan dan mengeluarkan instruksi seperti berhenti atau menjeda. SCM meneruskan kode operasi, yang ditunjukkan di bawah ini, untuk Handler
menunjukkan apa yang harus dilakukan layanan.
Kode operasi | Makna |
---|---|
SERVICE_CONTROL_STOP | Menghentikan layanan. Ambil alih metode CAtlServiceModuleT::OnStop di atlbase.h untuk mengubah perilaku. |
SERVICE_CONTROL_PAUSE | Pengguna diimplementasikan. Ambil alih metode kosong CAtlServiceModuleT::OnPause di atlbase.h untuk menjeda layanan. |
SERVICE_CONTROL_CONTINUE | Pengguna diimplementasikan. Ambil alih metode kosong CAtlServiceModuleT::OnContinue di atlbase.h untuk melanjutkan layanan. |
SERVICE_CONTROL_INTERROGATE | Pengguna diimplementasikan. Ambil alih metode kosong CAtlServiceModuleT::OnInterrogate di atlbase.h untuk menginterogasi layanan. |
SERVICE_CONTROL_SHUTDOWN | Pengguna diimplementasikan. Ambil alih metode kosong CAtlServiceModuleT::OnShutdown di atlbase.h untuk mematikan layanan. |
Jika kode operasi tidak dikenali, metode CAtlServiceModuleT::OnUnknownRequest dipanggil.
Layanan default yang dihasilkan ATL hanya menangani instruksi berhenti. Jika SCM melewati instruksi berhenti, layanan memberi tahu SCM bahwa program akan berhenti. Layanan kemudian memanggil PostThreadMessage
untuk memposting pesan keluar ke dirinya sendiri. Ini mengakhiri perulangan pesan dan layanan pada akhirnya akan ditutup.
CAtlServiceModuleT::InitializeSecurity
Menyediakan pengaturan keamanan default untuk layanan.
HRESULT InitializeSecurity() throw();
Tampilkan Nilai
Mengembalikan S_OK saat berhasil, atau kesalahan HRESULT saat gagal.
Keterangan
Setiap kelas yang berasal dari CAtlServiceModuleT
harus menerapkan metode ini di kelas turunan.
Gunakan autentikasi tingkat PKT, tingkat peniruan RPC_C_IMP_LEVEL_IDENTIFY dan deskriptor keamanan non-null yang sesuai dalam panggilan ke CoInitializeSecurity
.
Untuk proyek layanan nonattributed yang dihasilkan wizard, ini akan berada di
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;
}
};
Untuk proyek layanan yang diatribusikan, ini akan berada di
[ 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
Menginstal dan membuat layanan.
BOOL Install() throw();
Tampilkan Nilai
Mengembalikan TRUE pada keberhasilan, FALSE pada kegagalan.
Keterangan
Menginstal layanan ke database Service Control Manager (SCM) lalu membuat objek layanan. Jika layanan tidak dapat dibuat, kotak pesan ditampilkan dan metode mengembalikan FALSE.
CAtlServiceModuleT::IsInstalled
Mengonfirmasi bahwa layanan telah diinstal.
BOOL IsInstalled() throw();
Tampilkan Nilai
Mengembalikan TRUE jika layanan diinstal, FALSE jika tidak.
CAtlServiceModuleT::LogEvent
Menulis ke log peristiwa.
void __cdecl LogEvent(LPCTSTR pszFormat, ...) throw();
Parameter
pszFormat
String untuk menulis ke log peristiwa.
...
String tambahan opsional yang akan ditulis ke log peristiwa.
Keterangan
Metode ini menulis detail ke log peristiwa, menggunakan fungsi ReportEvent. Jika tidak ada layanan yang berjalan, string dikirim ke konsol.
CAtlServiceModuleT::m_bService
Bendera yang menunjukkan program berjalan sebagai layanan.
BOOL m_bService;
Keterangan
Digunakan untuk membedakan Service EXE dari Application EXE.
CAtlServiceModuleT::m_dwThreadID
Variabel anggota yang menyimpan pengidentifikasi utas Layanan.
DWORD m_dwThreadID;
Keterangan
Variabel ini menyimpan pengidentifikasi utas dari utas saat ini.
CAtlServiceModuleT::m_hServiceStatus
Variabel anggota menyimpan handel ke struktur informasi status untuk layanan saat ini.
SERVICE_STATUS_HANDLE m_hServiceStatus;
Keterangan
Struktur SERVICE_STATUS berisi informasi tentang layanan.
CAtlServiceModuleT::m_status
Variabel anggota yang menyimpan struktur informasi status untuk layanan saat ini.
SERVICE_STATUS m_status;
Keterangan
Struktur SERVICE_STATUS berisi informasi tentang layanan.
CAtlServiceModuleT::m_szServiceName
Nama layanan yang didaftarkan.
TCHAR [256] m_szServiceName;
Keterangan
String null-terminated yang menyimpan nama layanan.
CAtlServiceModuleT::OnContinue
Ambil alih metode ini untuk melanjutkan layanan.
void OnContinue() throw();
CAtlServiceModuleT::OnInterrogate
Ambil alih metode ini untuk menginterogasi layanan.
void OnInterrogate() throw();
CAtlServiceModuleT::OnPause
Ambil alih metode ini untuk menjeda layanan.
void OnPause() throw();
CAtlServiceModuleT::OnShutdown
Ambil alih metode ini untuk mematikan layanan.
void OnShutdown() throw();
CAtlServiceModuleT::OnStop
Ambil alih metode ini untuk menghentikan layanan.
void OnStop() throw();
CAtlServiceModuleT::OnUnknownRequest
Ambil alih metode ini untuk menangani permintaan yang tidak diketahui ke layanan.
void OnUnknownRequest(DWORD /* dwOpcode*/) throw();
Parameter
dwOpcode
Dicadangkan.
CAtlServiceModuleT::P arseCommandLine
Mengurai baris perintah dan melakukan pendaftaran jika perlu.
bool ParseCommandLine(LPCTSTR lpCmdLine, HRESULT* pnRetCode) throw();
Parameter
lpCmdLine
Baris perintah.
pnRetCode
HRESULT sesuai dengan pendaftaran (jika terjadi).
Tampilkan Nilai
Mengembalikan true pada keberhasilan, atau false jika file RGS yang disediakan di baris perintah tidak dapat didaftarkan.
Keterangan
Mengurai baris perintah dan mendaftarkan atau membatalkan pendaftaran file RGS yang disediakan jika perlu. Metode ini memanggil CAtlExeModuleT::P arseCommandLine untuk memeriksa /RegServer dan /UnregServer. Menambahkan argumen -/Service akan mendaftarkan layanan.
CAtlServiceModuleT::P reMessageLoop
Metode ini dipanggil segera sebelum memasukkan perulangan pesan.
HRESULT PreMessageLoop(int nShowCmd) throw();
Parameter
nShowCmd
Parameter ini diteruskan ke CAtlExeModuleT::P reMessageLoop.
Tampilkan Nilai
Mengembalikan S_OK saat berhasil, atau kesalahan HRESULT saat gagal.
Keterangan
Ambil alih metode ini untuk menambahkan kode inisialisasi kustom untuk Layanan.
CAtlServiceModuleT::RegisterAppId
Mendaftarkan layanan di registri.
inline HRESULT RegisterAppId(bool bService = false) throw();
Parameter
bService
Harus benar untuk mendaftar sebagai layanan.
Tampilkan Nilai
Mengembalikan S_OK saat berhasil, atau kesalahan HRESULT saat gagal.
CAtlServiceModuleT::Run
Menjalankan layanan.
HRESULT Run(int nShowCmd = SW_HIDE) throw();
Parameter
nShowCmd
Menentukan bagaimana jendela akan ditampilkan. Parameter ini dapat menjadi salah satu nilai yang dibahas di bagian WinMain . Nilai defaultnya adalah SW_HIDE.
Tampilkan Nilai
Mengembalikan S_OK saat berhasil, atau kesalahan HRESULT saat gagal.
Keterangan
Setelah dipanggil, Run
panggil CAtlServiceModuleT::P reMessageLoop, CAtlExeModuleT::RunMessageLoop, dan CAtlExeModuleT::P ostMessageLoop.
CAtlServiceModuleT::ServiceMain
Metode ini dipanggil oleh Service Control Manager.
void ServiceMain(DWORD dwArgc, LPTSTR* lpszArgv) throw();
Parameter
dwArgc
Argumen argc.
lpszArgv
Argumen argv.
Keterangan
Service Control Manager (SCM) memanggil ServiceMain
saat Anda membuka aplikasi Layanan di Panel Kontrol, pilih layanan, dan klik Mulai.
Setelah SCM memanggil ServiceMain
, layanan harus memberikan fungsi handler kepada SCM. Fungsi ini memungkinkan SCM mendapatkan status layanan dan meneruskan instruksi tertentu (seperti menjeda atau berhenti). Selanjutnya, CAtlServiceModuleT::Run dipanggil untuk melakukan pekerjaan utama layanan. Run
terus dijalankan hingga layanan dihentikan.
CAtlServiceModuleT::SetServiceStatus
Metode ini memperbarui status layanan.
void SetServiceStatus(DWORD dwState) throw();
Parameter
dwState
Status baru. Lihat SetServiceStatus untuk nilai yang mungkin.
Keterangan
Memperbarui informasi status Manajer Kontrol Layanan untuk layanan. Ini dipanggil oleh CAtlServiceModuleT::Run, CAtlServiceModuleT::ServiceMain dan metode handler lainnya. Status juga disimpan dalam variabel anggota CAtlServiceModuleT::m_status.
CAtlServiceModuleT::Start
Dipanggil oleh CAtlServiceModuleT::WinMain
ketika layanan dimulai.
HRESULT Start(int nShowCmd) throw();
Parameter
nShowCmd
Menentukan bagaimana jendela akan ditampilkan. Parameter ini dapat menjadi salah satu nilai yang dibahas di bagian WinMain .
Tampilkan Nilai
Mengembalikan S_OK saat berhasil, atau kesalahan HRESULT saat gagal.
Keterangan
Metode CAtlServiceModuleT::WinMain menangani pendaftaran dan penginstalan , serta tugas yang terlibat dalam menghapus entri registri dan menghapus instalasi modul. Ketika layanan dijalankan, WinMain
memanggil Start
.
CAtlServiceModuleT::Uninstall
Menghentikan dan menghapus layanan.
BOOL Uninstall() throw();
Tampilkan Nilai
Mengembalikan TRUE pada keberhasilan, FALSE pada kegagalan.
Keterangan
Menghentikan layanan berjalan dan menghapusnya dari database Service Control Manager.
CAtlServiceModuleT::Unlock
Mengurangi jumlah kunci layanan.
LONG Unlock() throw();
Tampilkan Nilai
Mengembalikan jumlah kunci, yang mungkin berguna untuk diagnostik dan penelusuran kesalahan.
CAtlServiceModuleT::UnregisterAppId
Menghapus layanan dari registri.
HRESULT UnregisterAppId() throw();
Tampilkan Nilai
Mengembalikan S_OK saat berhasil, atau kesalahan HRESULT saat gagal.
CAtlServiceModuleT::WinMain
Metode ini mengimplementasikan kode yang diperlukan untuk memulai layanan.
int WinMain(int nShowCmd) throw();
Parameter
nShowCmd
Menentukan bagaimana jendela akan ditampilkan. Parameter ini dapat menjadi salah satu nilai yang dibahas di bagian WinMain .
Tampilkan Nilai
Mengembalikan nilai pengembalian layanan.
Keterangan
Metode ini memproses baris perintah (dengan CAtlServiceModuleT::P arseCommandLine) dan kemudian memulai layanan (menggunakan CAtlServiceModuleT::Start).