Bagikan melalui


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

_ATL_MODULE

CAtlModule

CAtlModuleT

CAtlExeModuleT

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

Baca juga

Kelas CAtlExeModuleT
Gambaran Umum Kelas