Bahasa

Tutorial: Membuat aplikasi layanan Windows

Artikel ini menunjukkan cara membuat aplikasi layanan Windows .NET Framework di Visual Studio. Layanan ini hanya menulis pesan ke log peristiwa.

Nota

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:

Membuat layanan

Untuk memulai, buat proyek dan atur nilai yang diperlukan agar layanan berfungsi dengan benar.

  1. Dari menu File Visual Studio, pilihProyek> (atau tekan Ctrl+Shift+N) untuk membuka jendela Proyek Baru.

  2. Temukan dan pilih templat proyek Windows Service (.NET Framework).

    Nota

    Jika Anda tidak melihat templat Layanan Windows , Anda mungkin perlu menginstal beban kerja pengembangan desktop .NET menggunakan Penginstal Visual Studio.

  3. Untuk Nama proyek, masukkan MyNewService, lalu pilih Buat.

    Tab Desain muncul (Service1.cs [Desain] atau Service1.vb [Desain]).

    Templat proyek menyertakan kelas komponen bernama Service1 yang diwarisi dari System.ServiceProcess.ServiceBase. Ini termasuk banyak kode layanan dasar, seperti kode untuk memulai layanan.

Mengganti nama layanan

Ganti nama layanan dari Service1 ke MyNewService.

  1. Di Penjelajah Solusi, pilih Service1.cs atau Service1.vb, dan pilih Ganti Nama dari menu pintasan. Ganti nama file menjadi MyNewService.cs atau MyNewService.vb, lalu tekan Enter.

    Jendela pop-up muncul menanyakan apakah Anda ingin mengganti nama semua referensi ke elemen kode Service1.

  2. Di jendela pop-up, pilih Ya.

    Ganti nama prompt

  3. Pilih Simpan Semua dari menu File .

Menambahkan fitur ke layanan

Di bagian ini, Anda menambahkan log peristiwa kustom ke layanan Windows. Komponen EventLog adalah contoh jenis komponen yang dapat Anda tambahkan ke layanan Windows.

Tambahkan fungsi log peristiwa kustom

  1. Di jendela Kotak Alat , perluas Komponen, lalu seret komponen EventLog ke perancang Service1.cs [Desain] atau Service1.vb [Desain ].

    Tip

    Jika Anda tidak melihat jendela Kotak Alat, pilih Tampilkan>Kotak Alat.

  2. Di Penjelajah Solusi, dari menu pintasan untuk MyNewService.cs atau MyNewService.vb, pilih Tampilkan Kode.

  3. Tentukan log peristiwa kustom.

    Untuk C#, edit konstruktor yang ada MyNewService() seperti yang ditunjukkan dalam cuplikan kode berikut. Untuk Visual Basic, tambahkan konstruktor seperti yang New() ditunjukkan dalam cuplikan kode berikut.

    public MyNewService()
    {
        InitializeComponent();
        eventLog1 = new EventLog();
        if (!EventLog.SourceExists("MySource"))
        {
            EventLog.CreateEventSource("MySource", "MyNewLog");
        }
        eventLog1.Source = "MySource";
        eventLog1.Log = "MyNewLog";
    }
    
    ' To access the constructor in Visual Basic, select New from the
    ' method name drop-down list. 
    Public Sub New()
        MyBase.New()
        InitializeComponent()
        Me.EventLog1 = New System.Diagnostics.EventLog
        If Not System.Diagnostics.EventLog.SourceExists("MySource") Then
            System.Diagnostics.EventLog.CreateEventSource("MySource",
            "MyNewLog")
        End If
        EventLog1.Source = "MySource"
        EventLog1.Log = "MyNewLog"
    End Sub
    
  4. Jika belum ada, tambahkan using direktif ke MyNewService.cs, atau Imports pernyataan ke MyNewService.vb, untuk System.Diagnostics namespace:

    using System.Diagnostics;
    
    Imports System.Diagnostics
    
  5. Pilih Simpan Semua dari menu File .

Tentukan apa yang terjadi ketika layanan dimulai

Di editor kode untuk MyNewService.cs atau MyNewService.vb, temukan metode .OnStart Visual Studio secara otomatis membuat definisi metode kosong saat Anda membuat proyek. Tambahkan kode yang menulis entri ke log peristiwa saat layanan dimulai:

protected override void OnStart(string[] args)
{
    eventLog1.WriteEntry("In OnStart.");
}
' To access the OnStart in Visual Basic, select OnStart from the
' method name drop-down list. 
Protected Overrides Sub OnStart(ByVal args() As String)
    EventLog1.WriteEntry("In OnStart")
End Sub

Pemantauan​

Karena aplikasi layanan dirancang agar berjalan lama, biasanya melakukan polling atau memantau sistem, yang Anda siapkan dalam metode OnStart. Metode OnStart harus kembali ke sistem operasi setelah operasi layanan dimulai sehingga sistem tidak diblokir.

Untuk menyiapkan mekanisme polling sederhana, gunakan System.Timers.Timer komponen . Timer memicu Elapsed peristiwa secara berkala, di mana pada saat itu layanan Anda dapat melakukan pemantauan. Anda menggunakan Timer komponen sebagai berikut:

  • Atur properti komponen Timer dalam metode MyNewService.OnStart.
  • Mulai timer dengan memanggil Start metode .
Menyiapkan mekanisme polling
  1. Tambahkan direktif using ke MyNewService.cs, atau Imports pernyataan ke MyNewService.vb, untuk System.Timers namespace:

    using System.Timers;
    
    Imports System.Timers
    
  2. Tambahkan kode berikut dalam MyNewService.OnStart event untuk mengatur mekanisme polling.

    // Set up a timer that triggers every minute.
    Timer timer = new Timer
    {
        Interval = 60000 // 60 seconds
    };
    timer.Elapsed += new ElapsedEventHandler(this.OnTimer);
    timer.Start();
    
    ' Set up a timer that triggers every minute.
    Dim timer As Timer = New Timer()
    timer.Interval = 60000 ' 60 seconds
    AddHandler timer.Elapsed, AddressOf Me.OnTimer
    timer.Start()
    
  3. Di kelas MyNewService, tambahkan variabel anggota. Ini berisi pengidentifikasi peristiwa berikutnya untuk ditulis ke dalam log peristiwa:

    private int eventId = 1;
    
    Private eventId As Integer = 1
    
  4. Dalam kelas MyNewService, tambahkan metode OnTimer untuk menangani event Timer.Elapsed.

    public void OnTimer(object sender, ElapsedEventArgs args)
    {
        // TODO: Insert monitoring activities here.
        eventLog1.WriteEntry("Monitoring the System", EventLogEntryType.Information, eventId++);
    }
    
    Private Sub OnTimer(sender As Object, e As Timers.ElapsedEventArgs)
       ' TODO: Insert monitoring activities here.
       eventLog1.WriteEntry("Monitoring the System", EventLogEntryType.Information, eventId)
       eventId = eventId + 1
    End Sub
    

Alih-alih menjalankan semua pekerjaan Anda di utas utama, Anda dapat menjalankan tugas dengan menggunakan utas pekerja latar belakang. Untuk informasi selengkapnya, lihat System.ComponentModel.BackgroundWorker .

Tentukan apa yang terjadi ketika layanan dihentikan

Sisipkan baris kode dalam OnStop metode yang menambahkan entri ke log peristiwa saat layanan dihentikan:

protected override void OnStop()
{
    eventLog1.WriteEntry("In OnStop.");
}
Protected Overrides Sub OnStop()
    EventLog1.WriteEntry("In OnStop.")
End Sub

Menentukan tindakan lain untuk layanan

Anda dapat menimpa metode OnPause, OnContinue, dan OnShutdown untuk mendefinisikan pemrosesan tambahan bagi komponen Anda.

Kode berikut menunjukkan bagaimana Anda dapat mengambil alih OnContinue metode di MyNewService kelas :

protected override void OnContinue()
{
    eventLog1.WriteEntry("In OnContinue.");
}
Protected Overrides Sub OnContinue()
    EventLog1.WriteEntry("In OnContinue.")
End Sub

Mengatur status layanan

Layanan melaporkan status mereka ke Manajer Kontrol Layanan sehingga pengguna dapat mengetahui apakah layanan berfungsi dengan benar. Secara default, layanan yang mewarisi dari ServiceBase melaporkan serangkaian pengaturan status yang terbatas, yang mencakup SERVICE_STOPPED, SERVICE_PAUSED, dan SERVICE_RUNNING. Jika sebuah layanan membutuhkan waktu cukup lama untuk memulai, akan berguna untuk melaporkan status SERVICE_START_PENDING.

Anda dapat menerapkan SERVICE_START_PENDING pengaturan status dan SERVICE_STOP_PENDING dengan menambahkan kode yang memanggil fungsi Windows SetServiceStatus .

  1. Tambahkan direktif using ke MyNewService.cs, atau Imports pernyataan ke MyNewService.vb, untuk System.Runtime.InteropServices namespace:

    using System.Runtime.InteropServices;
    
    Imports System.Runtime.InteropServices
    
  2. Tambahkan enumerasi dan struktur berikut ke MyNewService.cs, atau MyNewService.vb, untuk mendeklarasikan ServiceState nilai dan menambahkan struktur untuk status, yang akan Anda gunakan dalam panggilan pemanggilan platform:

    public enum ServiceState
    {
        SERVICE_STOPPED = 0x00000001,
        SERVICE_START_PENDING = 0x00000002,
        SERVICE_STOP_PENDING = 0x00000003,
        SERVICE_RUNNING = 0x00000004,
        SERVICE_CONTINUE_PENDING = 0x00000005,
        SERVICE_PAUSE_PENDING = 0x00000006,
        SERVICE_PAUSED = 0x00000007,
    }
    
    [StructLayout(LayoutKind.Sequential)]
    public struct ServiceStatus
    {
        public int dwServiceType;
        public ServiceState dwCurrentState;
        public int dwControlsAccepted;
        public int dwWin32ExitCode;
        public int dwServiceSpecificExitCode;
        public int dwCheckPoint;
        public int dwWaitHint;
    };
    
    Public Enum ServiceState
        SERVICE_STOPPED = 1
        SERVICE_START_PENDING = 2
        SERVICE_STOP_PENDING = 3
        SERVICE_RUNNING = 4
        SERVICE_CONTINUE_PENDING = 5
        SERVICE_PAUSE_PENDING = 6
        SERVICE_PAUSED = 7
    End Enum
    
    <StructLayout(LayoutKind.Sequential)>
    Public Structure ServiceStatus
        Public dwServiceType As Long
        Public dwCurrentState As ServiceState
        Public dwControlsAccepted As Long
        Public dwWin32ExitCode As Long
        Public dwServiceSpecificExitCode As Long
        Public dwCheckPoint As Long
        Public dwWaitHint As Long
    End Structure
    

    Nota

    Manajer Kontrol Layanan menggunakan dwWaitHint dan dwCheckpoint anggota struktur SERVICE_STATUS untuk menentukan berapa banyak waktu untuk menunggu layanan Windows dimulai atau dimatikan. Jika metode OnStart dan OnStop Anda berjalan lama, layanan Anda dapat meminta lebih banyak waktu dengan memanggil SetServiceStatus lagi dengan nilai dwCheckPoint yang bertambah.

  3. MyNewService Di kelas , deklarasikan fungsi SetServiceStatus dengan menggunakan pemanggilan platform:

    [DllImport("advapi32.dll", SetLastError = true)]
    private static extern bool SetServiceStatus(System.IntPtr handle, ref ServiceStatus serviceStatus);
    
    Declare Auto Function SetServiceStatus Lib "advapi32.dll" (ByVal handle As IntPtr, ByRef serviceStatus As ServiceStatus) As Boolean
    
  4. Untuk menerapkan SERVICE_START_PENDING status, tambahkan kode berikut ke awal OnStart metode:

    // Update the service state to Start Pending.
    ServiceStatus serviceStatus = new ServiceStatus
    {
        dwCurrentState = ServiceState.SERVICE_START_PENDING,
        dwWaitHint = 100000
    };
    SetServiceStatus(this.ServiceHandle, ref serviceStatus);
    
    ' Update the service state to Start Pending.
    Dim serviceStatus As ServiceStatus = New ServiceStatus()
    serviceStatus.dwCurrentState = ServiceState.SERVICE_START_PENDING
    serviceStatus.dwWaitHint = 100000
    SetServiceStatus(Me.ServiceHandle, serviceStatus)
    
  5. Tambahkan kode ke akhir OnStart metode untuk mengatur status ke SERVICE_RUNNING:

    // Update the service state to Running.
    serviceStatus.dwCurrentState = ServiceState.SERVICE_RUNNING;
    SetServiceStatus(this.ServiceHandle, ref serviceStatus);
    
    ' Update the service state to Running.
    serviceStatus.dwCurrentState = ServiceState.SERVICE_RUNNING
    SetServiceStatus(Me.ServiceHandle, serviceStatus)
    
  6. (Opsional) Jika OnStop adalah metode yang berjalan lama, ulangi prosedur ini dalam OnStop metode . Terapkan status SERVICE_STOP_PENDING dan kembalikan status SERVICE_STOPPED sebelum method OnStop selesai.

    Contohnya:

    // Update the service state to Stop Pending.
    ServiceStatus serviceStatus = new ServiceStatus
    {
        dwCurrentState = ServiceState.SERVICE_STOP_PENDING,
        dwWaitHint = 100000
    };
    SetServiceStatus(this.ServiceHandle, ref serviceStatus);
    
    // Update the service state to Stopped.
    serviceStatus.dwCurrentState = ServiceState.SERVICE_STOPPED;
    SetServiceStatus(this.ServiceHandle, ref serviceStatus);
    
    ' Update the service state to Stop Pending.
    Dim serviceStatus As ServiceStatus = New ServiceStatus()
    serviceStatus.dwCurrentState = ServiceState.SERVICE_STOP_PENDING
    serviceStatus.dwWaitHint = 100000
    SetServiceStatus(Me.ServiceHandle, serviceStatus)
    
    ' Update the service state to Stopped.
    serviceStatus.dwCurrentState = ServiceState.SERVICE_STOPPED
    SetServiceStatus(Me.ServiceHandle, serviceStatus)
    

Menambahkan alat penginstal ke layanan

Sebelum menjalankan layanan Windows, Anda perlu menginstalnya, yang mendaftarkannya dengan Service Control Manager. Tambahkan penginstal ke proyek Anda untuk menangani detail pendaftaran.

  1. Di Penjelajah Solusi, dari menu pintasan untuk MyNewService.cs atau MyNewService.vb, pilih Tampilkan Perancang.

  2. Dalam tampilan Desain , pilih area latar belakang, lalu pilih Tambahkan Penginstal dari menu pintasan.

    Secara default, Visual Studio menambahkan kelas komponen bernama ProjectInstaller, yang berisi dua alat penginstal, ke proyek Anda. Alat penginstal ini ditujukan untuk layanan Anda dan untuk proses yang terkait dengan layanan tersebut.

  3. Dalam tampilan Desain untuk ProjectInstaller, pilih serviceInstaller1 untuk proyek C#, atau ServiceInstaller1 untuk proyek Visual Basic, lalu pilih Properti dari menu pintasan.

  4. Di jendela Properti , atur properti ke ServiceNameMyNewService.

  5. Tambahkan teks ke Description properti , seperti layanan sampel.

    Teks ini muncul di kolom Deskripsi jendela Layanan dan menjelaskan layanan kepada pengguna.

    Deskripsi layanan di jendela Layanan.

  6. Tambahkan teks ke DisplayName properti . Misalnya, Nama Tampilan MyNewService.

    Teks ini muncul di kolom Nama Tampilan jendela Layanan . Nama ini bisa berbeda dari ServiceName properti , yang merupakan nama yang digunakan sistem (misalnya, nama yang Anda gunakan untuk net start perintah untuk memulai layanan Anda).

  7. Atur properti StartType ke Automatic dari drop-down daftar.

  8. Setelah selesai, jendela Properti akan terlihat seperti gambar berikut:

    Properti Penginstal untuk layanan Windows

  9. Dalam tampilan Desain untuk ProjectInstaller, pilih serviceProcessInstaller1 untuk proyek C#, atau ServiceProcessInstaller1 untuk proyek Visual Basic, lalu pilih Properti dari menu pintasan. Atur properti Account ke LocalSystem dari drop-down daftar.

    Pengaturan ini menginstal layanan dan menjalankannya dengan menggunakan akun sistem lokal.

    Penting

    Akun LocalSystem memiliki izin yang luas, termasuk kemampuan untuk menulis ke log peristiwa. Gunakan akun ini dengan hati-hati, karena mungkin meningkatkan risiko serangan Anda dari perangkat lunak berbahaya. Untuk tugas lain, pertimbangkan untuk menggunakan LocalService akun, yang bertindak sebagai pengguna yang tidak istimewa di komputer lokal dan menyajikan kredensial anonim ke server jarak jauh apa pun. Namun, contoh ini gagal jika Anda mencoba menggunakan LocalService akun, karena memerlukan izin untuk menulis ke log peristiwa.

Untuk informasi selengkapnya tentang penginstal, lihat Cara: Menambahkan penginstal ke aplikasi layanan Anda.

(Opsional) Mengatur parameter startup

Nota

Sebelum Anda memutuskan untuk menambahkan parameter startup, pertimbangkan apakah itu cara terbaik untuk meneruskan informasi ke layanan Anda. Meskipun mudah digunakan dan diurai, serta pengguna dapat dengan mudah mengubahnya, mereka mungkin lebih sulit ditemukan dan digunakan oleh pengguna tanpa dokumentasi. Umumnya, jika layanan Anda memerlukan lebih dari sekadar beberapa parameter startup, Anda harus menggunakan registri atau file konfigurasi sebagai gantinya.

Layanan Windows dapat menerima argumen baris perintah, juga dikenal sebagai parameter startup. Saat Anda menambahkan kode untuk memproses parameter startup, pengguna dapat memulai layanan Anda dengan parameter startup kustom mereka sendiri di jendela properti layanan. Namun, parameter startup ini tidak bertahan ketika layanan dijalankan kembali.

Untuk mengatur parameter startup secara permanen, atur parameter tersebut di registri. Setiap layanan Windows memiliki entri registri di bawah subkuntang HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services . Di dalam subkunci masing-masing layanan, gunakan subkunci Parameters untuk menyimpan informasi yang dapat diakses layanan Anda. Anda dapat menggunakan file konfigurasi aplikasi untuk layanan Windows dengan cara yang sama seperti yang Anda lakukan untuk jenis program lain. Untuk kode sampel, lihat ConfigurationManager.AppSettings.

Untuk menambahkan parameter startup

  1. Dalam MyNewService.cs, atau MyNewService.vb, ubah MyNewService konstruktor untuk menerima dan memproses parameter input:

    public MyNewService(string[] args)
    {
        InitializeComponent();
    
        string eventSourceName = "MySource";
        string logName = "MyNewLog";
    
        if (args.Length > 0)
        {
            eventSourceName = args[0];
        }
    
        if (args.Length > 1)
        {
            logName = args[1];
        }
    
        eventLog1 = new EventLog();
    
        if (!EventLog.SourceExists(eventSourceName))
        {
            EventLog.CreateEventSource(eventSourceName, logName);
        }
    
        eventLog1.Source = eventSourceName;
        eventLog1.Log = logName;
    }
    
    Public Sub New(ByVal cmdArgs() As String)
        InitializeComponent()
        Dim eventSourceName As String = "MySource"
        Dim logName As String = "MyNewLog"
        If (cmdArgs.Count() > 0) Then
            eventSourceName = cmdArgs(0)
        End If
        If (cmdArgs.Count() > 1) Then
            logName = cmdArgs(1)
        End If
        eventLog1 = New EventLog()
        If (Not EventLog.SourceExists(eventSourceName)) Then
            EventLog.CreateEventSource(eventSourceName, logName)
        End If
        eventLog1.Source = eventSourceName
        eventLog1.Log = logName
    End Sub
    

    Kode ini mengatur sumber peristiwa dan nama log sesuai dengan parameter startup yang disediakan pengguna. Jika tidak ada argumen yang disediakan, argumen tersebut menggunakan nilai default.

  2. Pilih Program.cs, atau MyNewService.Designer.vb, lalu pilih Tampilkan Kode dari menu pintasan. Main Dalam metode , ubah kode untuk menambahkan parameter input dan meneruskannya ke konstruktor layanan:

    static void Main(string[] args)
    {
        ServiceBase[] ServicesToRun;
        ServicesToRun = new ServiceBase[]
        {
            new MyNewService(args)
        };
        ServiceBase.Run(ServicesToRun);
    }
    
    Shared Sub Main(ByVal cmdArgs() As String)
        Dim ServicesToRun() As System.ServiceProcess.ServiceBase = New System.ServiceProcess.ServiceBase() {New MyNewService(cmdArgs)}
        System.ServiceProcess.ServiceBase.Run(ServicesToRun)
    End Sub
    
  3. Untuk menentukan argumen baris perintah, tambahkan kode berikut ke ProjectInstaller kelas di ProjectInstaller.cs, atau ProjectInstaller.vb:

    protected override void OnBeforeInstall(IDictionary savedState)
    {
        string parameter = "MySource1\" \"MyLogFile1";
        Context.Parameters["assemblypath"] = "\"" + Context.Parameters["assemblypath"] + "\" \"" + parameter + "\"";
        base.OnBeforeInstall(savedState);
    }
    
    Protected Overrides Sub OnBeforeInstall(ByVal savedState As IDictionary)
        Dim parameter As String = "MySource1"" ""MyLogFile1"
        Context.Parameters("assemblypath") = """" + Context.Parameters("assemblypath") + """ """ + parameter + """"
        MyBase.OnBeforeInstall(savedState)
    End Sub
    

    Biasanya, nilai ini berisi jalur lengkap ke executable untuk layanan Windows. Agar layanan dimulai dengan benar, pengguna harus memberikan tanda kutip untuk jalur dan setiap parameter individual. Pengguna dapat mengubah parameter dalam entri registri ImagePath untuk mengubah parameter startup untuk layanan Windows. Namun, cara yang lebih baik adalah mengubah nilai secara terprogram dan mengekspos fungsionalitas dengan cara yang mudah digunakan, seperti dengan menggunakan utilitas manajemen atau konfigurasi.

Membangun layanan

  1. Di Penjelajah Solusi, pilih Properti dari menu pintasan untuk proyek MyNewService .

  2. Pada tab Aplikasi , di daftar objek Startup , pilih MyNewService.Program (atau Sub Main untuk proyek Visual Basic).

  3. Untuk membangun proyek, di Penjelajah Solusi, pilih Bangun dari menu pintasan untuk proyek Anda (atau tekan Ctrl+Shift+B).

Menginstal layanan

Sekarang setelah Anda membangun layanan Windows, Anda dapat menginstalnya. Untuk menginstal layanan Windows, Anda harus memiliki kredensial administrator pada komputer tempat layanan diinstal.

  1. Buka Perintah Pengembang untuk Visual Studio dengan kredensial administratif.

  2. Di Perintah Pengembang untuk Visual Studio, navigasikan ke folder yang berisi output proyek Anda (secara default, subdirektori \bin\Debug proyek Anda).

  3. Masukkan perintah berikut:

    installutil MyNewService.exe
    

    Jika layanan berhasil diinstal, perintah melaporkan keberhasilan.

    Jika sistem tidak dapat menemukan installutil.exe, pastikan sistem ada di komputer Anda. Alat ini diinstal dengan .NET Framework ke folder %windir%\Microsoft.NET\Framework[64]\<framework version>.

    Jika proses installutil.exe gagal, periksa log penginstalan untuk mengetahui alasannya. Secara default, log berada di folder yang sama dengan layanan yang dapat dieksekusi. Penginstalan dapat gagal jika:

    • Kelas RunInstallerAttribute tidak ada pada kelas ProjectInstaller.
    • Atribut tidak diatur ke true.
    • Kelas ProjectInstaller tidak didefinisikan sebagai public.
    • Anda tidak membuka Developer Command Prompt untuk VS sebagai Administrator.

Untuk informasi selengkapnya, lihat Cara: Menginstal dan menghapus instalan layanan.

Memulai dan menjalankan layanan

  1. Di Windows, buka aplikasi desktop Layanan : Tekan Windows+R untuk membuka kotak Jalankan , masukkan services.msc, lalu tekan Enter atau pilih OK.

    Anda akan melihat layanan Anda tercantum di Layanan, ditampilkan menurut abjad dengan nama tampilan yang Anda tetapkan untuk layanan tersebut.

    MyNewService di jendela Layanan.

  2. Untuk memulai layanan, pilih Mulai dari menu pintasan layanan.

  3. Untuk menghentikan layanan, pilih Hentikan dari menu pintasan layanan.

  4. (Opsional) Dari baris perintah, gunakan perintah net start <service name> dan net stop <service name> untuk memulai dan menghentikan layanan Anda.

Memverifikasi output log peristiwa layanan Anda

  1. Di Windows, buka aplikasi desktop Penampil Peristiwa : Masukkan Penampil Peristiwa di bilah pencarian Windows, lalu pilih Pemerilik Peristiwa dari hasil pencarian.

    Tip

    Di Visual Studio, Anda dapat mengakses log peristiwa dengan membuka Server Explorer dari menu Tampilan (atau tekan Ctrl+Alt+S) dan memperluas simpul Log Peristiwa untuk komputer lokal.

  2. Di Penampil Peristiwa, perluas Log Aplikasi dan Layanan.

  3. Temukan daftar untuk MyNewLog (atau MyLogFile1 jika Anda mengikuti prosedur untuk menambahkan argumen baris perintah) dan memperluasnya. Anda akan melihat entri untuk dua tindakan (mulai dan hentikan) yang dilakukan layanan Anda.

    Gunakan Pemerhati Peristiwa untuk melihat entri log peristiwa

Membersihkan sumber daya

Jika Anda tidak lagi memerlukan aplikasi layanan Windows, Anda dapat menghapusnya.

  1. Buka Perintah Pengembang untuk Visual Studio dengan kredensial administratif.

  2. Di jendela Perintah Pengembang untuk Visual Studio , navigasikan ke folder yang berisi proyek Anda yang dapat dieksekusi.

  3. Masukkan perintah berikut:

    installutil.exe /u MyNewService.exe
    

    Jika layanan berhasil dihapus, perintah melaporkan bahwa layanan Anda berhasil dihapus. Untuk informasi selengkapnya, lihat Cara: Menginstal dan menghapus instalan layanan.

Langkah selanjutnya

Setelah membuat layanan, Anda dapat:

  • Buat program penyetelan mandiri untuk digunakan orang lain untuk menginstal layanan Windows Anda. Gunakan WiX Toolset untuk membuat alat penginstal untuk layanan Windows. Untuk ide lain, lihat Membuat paket alat penginstal.

  • ServiceController Jelajahi komponen, yang memungkinkan Anda mengirim perintah ke layanan yang telah Anda instal.

  • Alih-alih membuat log peristiwa saat aplikasi berjalan, gunakan alat penginstal untuk membuat log peristiwa saat Anda menginstal aplikasi. Log peristiwa dihapus oleh penginstal saat Anda menghapus instalan aplikasi. Untuk informasi selengkapnya, lihat EventLogInstaller .

Baca juga