Fungsi StartServiceW (winsvc.h)
Memulai layanan.
Sintaksis
BOOL StartServiceW(
[in] SC_HANDLE hService,
[in] DWORD dwNumServiceArgs,
[in, optional] LPCWSTR *lpServiceArgVectors
);
Parameter
[in] hService
Handel ke layanan. Handel ini dikembalikan oleh fungsi
[in] dwNumServiceArgs
Jumlah string dalam array
[in, optional] lpServiceArgVectors
String yang dihentikan null untuk diteruskan ke fungsi ServiceMain
Layanan driver tidak menerima argumen ini.
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. Yang lain dapat diatur oleh fungsi registri yang dipanggil oleh manajer kontrol layanan.
Mengembalikan kode | Deskripsi |
---|---|
|
Handel tidak memiliki hak akses SERVICE_START. |
|
Handel tidak valid. |
|
File biner layanan tidak dapat ditemukan. |
|
Instans layanan sudah berjalan. |
|
Database dikunci. |
|
Layanan tergantung pada layanan yang tidak ada atau telah ditandai untuk penghapusan. |
|
Layanan tergantung pada layanan lain yang gagal dimulai. |
|
Layanan telah dinonaktifkan. |
|
Layanan tidak dimulai karena kegagalan masuk. Kesalahan ini terjadi jika layanan dikonfigurasi untuk berjalan di bawah akun yang tidak memiliki hak "Masuk sebagai layanan". |
|
Layanan telah ditandai untuk dihapus. |
|
Utas tidak dapat dibuat untuk layanan. |
|
Proses untuk layanan dimulai, tetapi tidak memanggil StartServiceCtrlDispatcher, atau utas yang disebut StartServiceCtrlDispatcher dapat diblokir dalam fungsi handler kontrol. |
Komentar
Ketika layanan driver dimulai, fungsi StartService
Ketika layanan dimulai, Service Control Manager (SCM) menelurkan proses layanan, jika perlu. Jika layanan yang ditentukan berbagi proses dengan layanan lain, proses yang diperlukan mungkin sudah ada. Fungsi StartService tidak menunggu pembaruan status pertama dari layanan baru, karena dapat memakan waktu cukup lama. Sebaliknya, itu kembali ketika SCM menerima pemberitahuan dari dispatcher kontrol layanan bahwa ServiceMain utas untuk layanan ini berhasil dibuat.
SCM mengatur nilai status default berikut sebelum kembali dari StartService:
- Status layanan saat ini diatur ke SERVICE_START_PENDING.
- Kontrol yang diterima diatur ke tidak ada (nol).
- Nilai CheckPoint diatur ke nol.
- Waktu WaitHint diatur ke 2 detik.
Layanan tidak dapat memanggil StartService
Seperti halnya ControlService, StartService akan memblokir selama 30 detik jika ada layanan yang sibuk menangani kode kontrol. Jika layanan sibuk masih belum kembali dari fungsi handler-nya ketika batas waktu habis, StartService gagal dengan ERROR_SERVICE_REQUEST_TIMEOUT. Ini karena SCM hanya memproses satu pemberitahuan kontrol layanan pada satu waktu.
Contoh
Misalnya, lihat Memulai Layanan.
Nota
Header winsvc.h mendefinisikan StartService sebagai alias yang secara otomatis memilih versi ANSI atau Unicode dari fungsi ini berdasarkan definisi konstanta preprosedur 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
QueryServiceDynamicInformation
Startup Layanan
ServiceMain