Pengantar Aplikasi Layanan Windows

Catatan

Artikel ini tidak berlaku untuk layanan yang dihosting di .NET. Untuk konten terbaru tentang layanan Windows menggunakan Microsoft.Extensions.Hosting.BackgroundService dan templat Layanan Pekerja, lihat:

Layanan Microsoft Windows, sebelumnya dikenal sebagai layanan NT, memungkinkan Anda membuat aplikasi yang dapat dieksekusi yang berjalan lama dalam sesi Windows mereka sendiri. Layanan ini dapat secara otomatis dimulai ketika komputer boot, dapat dijeda dan dimulai ulang, serta tidak menampilkan antarmuka pengguna apa pun. Fitur-fitur ini membuat layanan ideal untuk digunakan di server atau kapan pun Anda membutuhkan fungsionalitas jangka panjang yang tidak mengganggu pengguna lain yang bekerja di komputer yang sama. Anda juga dapat menjalankan layanan dalam konteks keamanan akun pengguna tertentu yang berbeda dengan pengguna yang masuk atau akun komputer default. Untuk informasi selengkapnya tentang layanan dan sesi Windows, lihat dokumentasi SDK Windows.

Anda dapat dengan mudah membuat layanan dengan membuat aplikasi yang diinstal sebagai layanan. Misalnya, Anda ingin memantau data penghitung kinerja dan bereaksi terhadap nilai ambang. Anda dapat menulis aplikasi Layanan Windows yang mendengarkan data penghitung kinerja, menyebarkan aplikasi, dan mulai mengumpulkan dan menganalisis data.

Anda dapat membuat layanan sebagai proyek Microsoft Visual Studio, menentukan kode di dalamnya yang mengontrol perintah yang dapat dikirim ke layanan serta tindakan yang harus diambil ketika perintah tersebut diterima. Perintah yang dapat dikirim ke layanan termasuk memulai, menjeda, melanjutkan, dan menghentikan layanan; Anda juga dapat menjalankan perintah khusus.

Setelah Anda membuat dan membangun aplikasi, Anda dapat menginstalnya dengan menjalankan utilitas baris perintah InstallUtil.exe dan meneruskan jalur ke file yang dapat dieksekusi layanan. Selanjutnya Anda dapat menggunakan Pengelola Kontrol Layanan untuk memulai, menghentikan, menjeda, melanjutkan, dan mengonfigurasi layanan Anda. Anda juga dapat menyelesaikan banyak tugas yang sama ini di node Layanan di Penjelajah Server atau menggunakan kelas ServiceController.

Aplikasi Layanan vs. Aplikasi Visual Studio Lainnya

Aplikasi layanan berfungsi secara berbeda dari banyak jenis proyek lainnya dalam beberapa cara:

  • File yang dapat dieksekusi yang dikompilasi dan dibuat proyek aplikasi layanan harus diinstal pada server sebelum proyek dapat berfungsi dengan cara yang bermakna. Anda tidak dapat men-debug atau menjalankan aplikasi layanan dengan menekan F5 atau F11; Anda tidak dapat segera menjalankan layanan atau masuk ke kodenya. Sebagai gantinya, Anda harus menginstal dan memulai layanan Anda, kemudian melampirkan debugger ke proses layanan. Untuk informasi selengkapnya, lihat Cara: Men-debug Aplikasi Layanan Windows.

  • Tidak seperti beberapa jenis proyek, Anda harus membuat komponen penginstalan untuk aplikasi layanan. Komponen penginstalan menginstal dan mendaftarkan layanan di server dan membuat entri untuk layanan Anda dengan Pengelola Kontrol Layanan Windows. Untuk informasi selengkapnya, lihat Cara: Menambahkan Alat Penginstal ke Aplikasi Layanan Anda.

  • Metode Main untuk aplikasi layanan Anda harus mengeluarkan perintah Jalankan untuk layanan yang dikandung proyek Anda. Metode Run memuat layanan ke dalam Pengelola Kontrol Layanan di server yang sesuai. Jika Anda menggunakan templat proyek Layanan Windows, metode ini ditulis untuk Anda secara otomatis. Perhatikan bahwa memuat layanan tidak sama dengan memulai layanan. Lihat "Masa Pakai Layanan" di bawah untuk informasi selengkapnya.

  • Aplikasi Layanan Windows berjalan di stasiun jendela yang berbeda dari stasiun interaktif pengguna yang masuk. Stasiun jendela adalah objek aman yang berisi Clipboard, sekumpulan atom global, dan grup objek desktop. Karena stasiun layanan Windows bukan stasiun interaktif, kotak dialog yang muncul dari dalam aplikasi layanan Windows tidak akan terlihat dan dapat menyebabkan program Anda berhenti merespons. Demikian pula, pesan kesalahan harus dicatat di log peristiwa Windows daripada dimunculkan di antarmuka pengguna.

    Kelas layanan Windows yang didukung oleh .NET Framework tidak mendukung interaksi dengan stasiun interaktif, yaitu pengguna yang masuk. .NET Framework juga tidak menyertakan kelas yang mewakili stasiun dan desktop. Jika layanan Windows harus berinteraksi dengan stasiun lain, Anda perlu mengakses API Windows yang tidak dikelola. Untuk informasi selengkapnya, lihat dokumentasi SDK Windows.

    Interaksi layanan Windows dengan pengguna atau stasiun lain harus dirancang dengan hati-hati untuk memasukkan skenario seperti tidak ada pengguna yang masuk, atau pengguna memiliki serangkaian objek desktop yang tidak diharapkan. Dalam beberapa kasus, mungkin lebih tepat untuk menulis aplikasi Windows yang berjalan atas kontrol pengguna.

  • Aplikasi layanan Windows berjalan dalam konteks keamanannya sendiri dan dimulai sebelum pengguna masuk ke komputer Windows tempat aplikasi tersebut diinstal. Anda harus merencanakan dengan hati-hati akun pengguna apa yang akan menjalankan layanan di dalamnya; layanan yang berjalan di bawah akun sistem memiliki lebih banyak izin dan hak istimewa daripada akun pengguna.

Masa Pakai Layanan

Sebuah layanan melewati beberapa status internal selama masa pakainya. Pertama, layanan diinstal ke sistem tempat layanan tersebut akan berjalan. Proses ini menjalankan alat penginstal untuk proyek layanan dan memuat layanan ke Pengelola Kontrol Layanan untuk komputer tersebut. Pengelola Kontrol Layanan adalah utilitas pusat yang disediakan oleh Windows untuk mengelola layanan.

Setelah dimuat, layanan harus dimulai. Memulai layanan memungkinkannya untuk mulai berfungsi. Anda dapat memulai layanan dari Pengelola Kontrol Layanan, dari Penjelajah Server, atau dari kode dengan memanggil metode Start. Metode Start ini meneruskan pemrosesan ke metode OnStart aplikasi dan memproses kode apa pun yang telah Anda tentukan di sana.

Layanan yang berjalan dapat berada dalam status ini tanpa batas waktu hingga layanan tersebut dihentikan atau dijeda atau hingga komputer dinonaktifkan. Layanan dapat berada di salah satu dari tiga status dasar: Running, Paused, atau Stopped. Layanan juga dapat melaporkan status perintah yang tertunda: ContinuePending, PausePending, StartPending, atau StopPending. Status ini menunjukkan bahwa perintah telah dikeluarkan, seperti perintah untuk menjeda layanan yang sedang berjalan, tetapi belum dilakukan. Anda dapat mengkueri Status untuk menentukan status layanan, atau menggunakan WaitForStatus untuk melakukan tindakan saat salah status ini terjadi.

Anda dapat menjeda, menghentikan, atau melanjutkan layanan dari Pengelola Kontrol Layanan, dari Penjelajah Server, atau dengan memanggil metode dalam kode. Setiap tindakan ini dapat memanggil prosedur terkait dalam layanan (OnStop, OnPause, atau OnContinue), di mana Anda dapat menentukan pemrosesan tambahan yang akan dilakukan saat layanan berubah status.

Jenis Layanan

Ada dua jenis layanan yang dapat Anda buat di Visual Studio menggunakan .NET Framework. Layanan yang merupakan satu-satunya layanan dalam proses ditetapkan jenis Win32OwnProcess. Layanan yang membagikan proses dengan layanan lain ditetapkan jenis Win32ShareProcess. Anda dapat mengambil jenis layanan dengan mengkueri properti ServiceType.

Terkadang Anda mungkin melihat jenis layanan lain jika Anda mengkueri layanan yang sudah ada yang tidak dibuat di Visual Studio. Untuk informasi selengkapnya tentang ini, lihat ServiceType.

Layanan dan Komponen ServiceController

Komponen ServiceController digunakan untuk terhubung ke layanan yang diinstal dan memanipulasi statusnya; menggunakan komponen ServiceController, Anda dapat memulai dan menghentikan layanan, menjeda dan melanjutkan fungsinya, serta mengirim perintah kustom ke layanan. Namun, Anda tidak perlu menggunakan komponen ServiceController saat membuat aplikasi layanan. Bahkan, dalam kebanyakan kasus, komponen ServiceController Anda harus ada di aplikasi terpisah dari aplikasi layanan Windows yang menentukan layanan Anda.

Untuk informasi selengkapnya, lihat ServiceController .

Persyaratan

  • Layanan harus dibuat di proyek aplikasi Layanan Windows atau .NET Framework lain–yang mendukung proyek yang membuat file .exe saat dibuat dan diwarisi dari kelas ServiceBase.

  • Proyek yang berisi layanan Windows harus memiliki komponen instalasi untuk proyek dan layanannya. Ini dapat dicapai dengan mudah dari jendela Properti. Untuk informasi selengkapnya, lihat Cara: Menambahkan Alat Penginstal ke Aplikasi Layanan Anda.

Lihat juga