Bagikan melalui


Fungsi StartServiceCtrlDispatcherA (winsvc.h)

Menghubungkan utas utama proses layanan ke manajer kontrol layanan, yang menyebabkan utas menjadi utas dispatcher kontrol layanan untuk proses panggilan.

Sintaksis

BOOL StartServiceCtrlDispatcherA(
  [in] const SERVICE_TABLE_ENTRYA *lpServiceStartTable
);

Parameter

[in] lpServiceStartTable

Penunjuk ke array struktur SERVICE_TABLE_ENTRY yang berisi satu entri untuk setiap layanan yang dapat dijalankan dalam proses panggilan. Anggota entri terakhir dalam tabel harus memiliki nilai NULL untuk menunjuk akhir tabel.

Mengembalikan nilai

Jika fungsi berhasil, nilai yang dikembalikan bukan nol.

Jika fungsi gagal, nilai yang dikembalikan adalah nol. Untuk mendapatkan informasi kesalahan yang diperluas, panggil GetLastError.

Kode kesalahan berikut dapat diatur oleh manajer kontrol layanan. Kode kesalahan lain dapat diatur oleh fungsi registri yang dipanggil oleh manajer kontrol layanan.

Mengembalikan kode Deskripsi
ERROR_FAILED_SERVICE_CONTROLLER_CONNECT
Kesalahan ini dikembalikan jika program dijalankan sebagai aplikasi konsol daripada sebagai layanan.

Jika program akan dijalankan sebagai aplikasi konsol untuk tujuan penelusuran kesalahan, strukturnya sedih sehingga kode khusus layanan tidak dipanggil ketika kesalahan ini dikembalikan.

ERROR_INVALID_DATA
Tabel pengiriman yang ditentukan berisi entri yang tidak dalam format yang tepat.
ERROR_SERVICE_ALREADY_RUNNING
Proses ini telah memanggil StartServiceCtrlDispatcher. Setiap proses dapat memanggil StartServiceCtrlDispatcher hanya satu kali.

Komentar

Ketika manajer kontrol layanan memulai proses layanan, ia menunggu proses untuk memanggil fungsi StartServiceCtrlDispatcher. Alur utama proses layanan harus melakukan panggilan ini sesegera mungkin setelah dimulai (dalam waktu 30 detik). Jika StartServiceCtrlDispatcher berhasil, itu menghubungkan utas panggilan ke manajer kontrol layanan dan tidak kembali sampai semua layanan yang berjalan dalam proses telah memasuki status SERVICE_STOPPED. Manajer kontrol layanan menggunakan koneksi ini untuk mengirim kontrol dan permintaan mulai layanan ke utas utama proses layanan. Utas utama bertindak sebagai dispatcher dengan memanggil fungsi HandlerEx yang sesuai untuk menangani permintaan kontrol, atau dengan membuat utas baru untuk menjalankan fungsi ServiceMain yang sesuai saat layanan baru dimulai.

Parameter lpServiceTable berisi entri untuk setiap layanan yang dapat berjalan dalam proses panggilan. Setiap entri menentukan fungsi ServiceMain untuk layanan tersebut. Untuk layanan SERVICE_WIN32_SHARE_PROCESS, setiap entri harus berisi nama layanan. Nama ini adalah nama layanan yang ditentukan oleh fungsi CreateService saat layanan diinstal. Untuk layanan SERVICE_WIN32_OWN_PROCESS, nama layanan dalam entri tabel diabaikan.

Jika layanan berjalan dalam prosesnya sendiri, utas utama proses layanan harus segera memanggil StartServiceCtrlDispatcher. Semua tugas inisialisasi dilakukan dalam fungsi ServiceMain layanan saat layanan dimulai.

Jika beberapa layanan berbagi proses dan beberapa inisialisasi seluruh proses umum perlu dilakukan sebelum fungsi ServiceMain dipanggil, utas utama dapat melakukan pekerjaan sebelum memanggil StartServiceCtrlDispatcher, selama membutuhkan waktu kurang dari 30 detik. Jika tidak, utas lain harus dibuat untuk melakukan inisialisasi di seluruh proses, sementara utas utama memanggil StartServiceCtrlDispatcher dan menjadi dispatcher kontrol layanan. Inisialisasi khusus layanan apa pun masih harus dilakukan dalam fungsi utama layanan individual.

Layanan tidak boleh mencoba menampilkan antarmuka pengguna secara langsung. Untuk informasi selengkapnya, lihat Interactive Services.

Contoh

Misalnya, lihat MenulisFungsi Utama Program Layanan .

Nota

Header winsvc.h mendefinisikan StartServiceCtrlDispatcher sebagai alias yang secara otomatis memilih versi ANSI atau Unicode dari fungsi ini berdasarkan definisi konstanta preprosedisor UNICODE. Mencampur penggunaan alias encoding-netral dengan kode yang tidak mengodekan-netral dapat menyebabkan ketidakcocokan yang mengakibatkan kesalahan kompilasi atau runtime. Untuk informasi selengkapnya, lihat Konvensi untuk Prototipe Fungsi.

Persyaratan

Syarat Nilai
klien minimum yang didukung Windows XP [hanya aplikasi desktop]
server minimum yang didukung Windows Server 2003 [hanya aplikasi desktop]
Platform Target Windows
Header winsvc.h (termasuk Windows.h)
Pustaka Advapi32.lib
DLL Advapi32.dll

Lihat juga

ControlService

HandlerEx

SERVICE_TABLE_ENTRY

Titik Masuk Layanan

Service Functions

ServiceMain