Öğretici: Windows hizmet uygulaması oluşturma

Uyarı

Bu belgeler Windows Hizmeti'nin en son sürümüne yönelik değildir. ve Çalışan Hizmeti şablonunu kullanan BackgroundService Windows Hizmetleri'nin en son içeriği için bkz:

Bu makalede, Visual Studio'da bir olay günlüğüne ileti yazan bir Windows hizmet uygulamasının nasıl oluşturulacağı gösterilmektedir.

Hizmet oluşturma

Başlamak için projeyi oluşturun ve hizmetin düzgün çalışması için gereken değerleri ayarlayın.

  1. Visual Studio Dosyamenüsünden Yeni Proje'yi> seçin (veya Ctrl+Shift+N tuşlarına basarak) Yeni Proje penceresini açın.

  2. Windows Hizmeti (.NET Framework) proje şablonunu bulun ve seçin.

    Not

    Windows Hizmeti şablonunu görmüyorsanız Visual Studio Yükleyicisi kullanarak .NET masaüstü geliştirme iş yükünü yüklemeniz gerekebilir.

  3. Ad alanına MyNewService yazın ve Tamam'ı seçin.

    Tasarım sekmesi görünür (Service1.cs [Tasarım] veya Service1.vb [Tasarım]).

    Proje şablonu, öğesinden System.ServiceProcess.ServiceBasedevralan adlı Service1 bir bileşen sınıfı içerir. Hizmeti başlatma kodu gibi temel hizmet kodunun çoğunu içerir.

Hizmeti yeniden adlandırma

Hizmeti Service1'denMyNewService olarak yeniden adlandırın.

  1. Çözüm Gezgini'da Service1.cs veya Service1.vb'yi seçin ve kısayol menüsünden Yeniden Adlandır'ı seçin. Dosyayı MyNewService.cs veya MyNewService.vb olarak yeniden adlandırın ve Enter tuşuna basın

    Service1 kod öğesine yapılan tüm başvuruları yeniden adlandırmak isteyip istemediğinizi soran bir açılır pencere görüntülenir.

  2. Açılır pencerede Evet'i seçin.

    Yeniden adlandırma istemi

  3. Tasarım sekmesinde, kısayol menüsünden Özellikler'i seçin. Özellikler penceresinde ServiceName değerini MyNewService olarak değiştirin.

    Hizmet özellikleri

  4. Dosyamenüsünden Tümünü Kaydet'i seçin.

Hizmete özellik ekleme

Bu bölümde, Windows hizmetine özel bir olay günlüğü eklersiniz. Bileşen EventLog , Windows hizmetine ekleyebileceğiniz bileşen türüne bir örnektir.

Özel olay günlüğü işlevselliği ekleme

  1. Çözüm Gezgini'da, MyNewService.cs veya MyNewService.vb kısayol menüsünden Görünüm Tasarım Aracı'ni seçin.

  2. Araç Kutusu'ndaBileşenler'i genişletin ve EventLog bileşenini Service1.cs [Tasarım] veya Service1.vb [Tasarım] sekmesine sürükleyin.

  3. Çözüm Gezgini'daMyNewService.cs veya MyNewService.vb kısayol menüsünde Kodu Görüntüle'yi seçin.

  4. Özel bir olay günlüğü tanımlayın.

    C# için, mevcut MyNewService() oluşturucuyu aşağıdaki kod parçacığında gösterildiği gibi düzenleyin. Visual Basic için oluşturucuyu New() aşağıdaki kod parçacığında gösterildiği gibi ekleyin.

    public MyNewService()
    {
        InitializeComponent();
        eventLog1 = new System.Diagnostics.EventLog();
        if (!System.Diagnostics.EventLog.SourceExists("MySource"))
        {
            System.Diagnostics.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
    
  5. using Ad alanı için System.DiagnosticsMyNewService.cs dosyasına bir deyim (henüz yoksa) veya MyNewService.vb dosyasına bir Imports deyim ekleyin:

    using System.Diagnostics;
    
    Imports System.Diagnostics
    
  6. Dosyamenüsünden Tümünü Kaydet'i seçin.

Hizmet başlatıldığında ne olduğunu tanımlama

MyNewService.cs veya MyNewService.vb için kod düzenleyicisinde OnStart yöntemini bulun. Projeyi oluşturduğunuzda Visual Studio otomatik olarak boş bir yöntem tanımı oluşturmuştur. Hizmet başlatıldığında olay günlüğüne bir giriş yazan kod ekleyin:

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

Yoklama

Bir hizmet uygulaması uzun süre çalışmak üzere tasarlandığından, genellikle yönteminde OnStart ayarladığınız sistemi yoklar veya izler. Sistemin OnStart engellenmemesi için hizmetin işlemi başladıktan sonra yönteminin işletim sistemine dönmesi gerekir.

Basit bir yoklama mekanizması ayarlamak için bileşenini kullanın System.Timers.Timer . Zamanlayıcı düzenli aralıklarla bir Elapsed olay tetikler ve bu sırada hizmetiniz izlemeyi gerçekleştirebilir. Bileşeni aşağıdaki gibi kullanırsınız Timer :

  • yöntemindeki bileşenin TimerMyNewService.OnStart özelliklerini ayarlayın.
  • yöntemini çağırarak zamanlayıcıyı Start başlatın.
Yoklama mekanizmasını ayarlama
  1. using Ad alanı için System.TimersMyNewService.cs dosyasına bir deyim veya MyNewService.vb dosyasına bir Imports deyim ekleyin:

    using System.Timers;
    
    Imports System.Timers
    
  2. Yoklama mekanizmasını MyNewService.OnStart ayarlamak için olaya aşağıdaki kodu ekleyin:

    // Set up a timer that triggers every minute.
    Timer timer = new Timer();
    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. MyNewService sınıfında bir üye değişkeni ekleyin. Olay günlüğüne yazacak bir sonraki olayın tanımlayıcısını içerir:

    private int eventId = 1;
    
    Private eventId As Integer = 1
    
  4. MyNewService sınıfında, olayı işlemek Timer.Elapsed için yöntemini ekleyinOnTimer:

    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
    

Tüm çalışmanızı ana iş parçacığında çalıştırmak yerine, arka plan çalışan iş parçacıklarını kullanarak görevleri çalıştırabilirsiniz. Daha fazla bilgi için bkz. System.ComponentModel.BackgroundWorker.

Hizmet durdurulduğunda ne olduğunu tanımlama

Yönteme OnStop , hizmet durdurulduğunda olay günlüğüne bir giriş ekleyen bir kod satırı ekleyin:

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

Hizmet için diğer eylemleri tanımlama

Bileşeniniz için ek işleme tanımlamak için , OnContinueve OnShutdown yöntemlerini geçersiz kılabilirsinizOnPause.

Aşağıdaki kod, sınıfındaki OnContinue yöntemini nasıl geçersiz kılabileceğinizi MyNewService gösterir:

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

Hizmet durumunu ayarlama

Hizmetler, kullanıcının bir hizmetin düzgün çalışıp çalışmadığını an edebilmesi için durumlarını Hizmet Denetim Yöneticisi'ne bildirir. Varsayılan olarak, hizmetten devralınan ServiceBase hizmet SERVICE_STOPPED, SERVICE_PAUSED ve SERVICE_RUNNING içeren sınırlı bir durum ayarları kümesi bildirir. Hizmetin başlatılması biraz zaman alıyorsa, SERVICE_START_PENDING durumunu bildirmek yararlı olur.

Windows SetServiceStatus işlevini çağıran kod ekleyerek SERVICE_START_PENDING ve SERVICE_STOP_PENDING durum ayarlarını uygulayabilirsiniz.

Hizmet bekleme durumunu uygulama

  1. using Ad alanı için System.Runtime.InteropServicesMyNewService.cs dosyasına bir deyim veya MyNewService.vb dosyasına bir Imports deyim ekleyin:

    using System.Runtime.InteropServices;
    
    Imports System.Runtime.InteropServices
    
  2. Değerleri bildirmek ServiceState ve durum için platform çağırma çağrısında kullanacağınız bir yapı eklemek için aşağıdaki kodu MyNewService.cs veya MyNewService.vb dosyasına ekleyin:

    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
    

    Not

    Hizmet Denetim Yöneticisi, bir Windows hizmetinin başlatılmasını veya kapatılmasını ne kadar süre bekleyeceğini belirlemek için SERVICE_STATUS yapısının ve dwCheckpoint üyelerini kullanırdwWaitHint. ve yöntemleriniz OnStart uzun süre çalıştırılırsa, hizmetiniz artımlı dwCheckPoint bir değerle yeniden çağırarak SetServiceStatus daha fazla zaman OnStop isteyebilir.

  3. MyNewService sınıfında, platform çağırmasını kullanarak SetServiceStatus işlevini bildirin:

    [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. SERVICE_START_PENDING durumunu uygulamak için yönteminin başına OnStart aşağıdaki kodu ekleyin:

    // Update the service state to Start Pending.
    ServiceStatus serviceStatus = new ServiceStatus();
    serviceStatus.dwCurrentState = ServiceState.SERVICE_START_PENDING;
    serviceStatus.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. Durumu SERVICE_RUNNING olarak ayarlamak için yönteminin sonuna OnStart kod ekleyin:

    // 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. (İsteğe bağlı) Uzun süre çalışan bir yöntemse OnStop , yönteminde OnStop bu yordamı yineleyin. SERVICE_STOP_PENDING durumunu uygulayın ve yöntemden çıkmadan önce SERVICE_STOPPED durumunu döndürin OnStop .

    Örnek:

    // Update the service state to Stop Pending.
    ServiceStatus serviceStatus = new ServiceStatus();
    serviceStatus.dwCurrentState = ServiceState.SERVICE_STOP_PENDING;
    serviceStatus.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)
    

Hizmete yükleyici ekleme

Bir Windows hizmetini çalıştırmadan önce, Service Control Manager'a kaydeden hizmeti yüklemeniz gerekir. Kayıt ayrıntılarını işlemek için projenize yükleyiciler ekleyin.

  1. Çözüm Gezgini'daMyNewService.cs veya MyNewService.vb kısayol menüsünden Görünüm Tasarım Aracı'ni seçin.

  2. Tasarım görünümünde arka plan alanını seçin ve ardından kısayol menüsünden Yükleyici Ekle'yi seçin.

    Varsayılan olarak, Visual Studio projenize iki yükleyici içeren adlı ProjectInstallerbir bileşen sınıfı ekler. Bu yükleyiciler hizmetinize ve hizmetin ilişkili işlemine yöneliktir.

  3. ProjectInstaller için Tasarım görünümünde, Visual C# projesi için serviceInstaller1'i veya Visual Basic projesi için ServiceInstaller1'i seçin ve sonra kısayol menüsünden Özellikler'i seçin.

  4. Özellikler penceresinde özelliğin ServiceNameMyNewService olarak ayarlandığını doğrulayın.

  5. Özelliğine Descriptionörnek hizmet gibi bir metin ekleyin.

    Bu metin, Hizmetler penceresinin Açıklama sütununda görünür ve hizmeti kullanıcıya açıklar.

    Hizmetler penceresinde hizmet açıklaması.

  6. Özelliğine DisplayName metin ekleyin. Örneğin, MyNewService Görünen Adı.

    Bu metin, Hizmetler penceresinin Görünen Ad sütununda görünür. Bu ad, sistemin kullandığı ad olan özelliğinden ServiceName farklı olabilir (örneğin, hizmetinizi başlatmak için komut için net start kullandığınız ad).

  7. StartType Özelliğini Automatic açılan listeden olarak ayarlayın.

  8. İşiniz bittiğinde Özellikler pencereleri aşağıdaki şekilde görünmelidir:

    Windows hizmeti Windows hizmeti yükleyici özellikleri için

  9. ProjectInstaller için Tasarım görünümünde, Visual C# projesi için serviceProcessInstaller1'i veya Visual Basic projesi için ServiceProcessInstaller1'i ve ardından kısayol menüsünden Özellikler'i seçin. Account Özelliğini LocalSystem açılan listeden olarak ayarlayın.

    Bu ayar hizmeti yükler ve yerel sistem hesabını kullanarak çalıştırır.

    Önemli

    Hesap LocalSystem , olay günlüğüne yazma özelliği de dahil olmak üzere geniş izinlere sahiptir. Bu hesabı kullanırken dikkatli olun; kötü amaçlı yazılımlardan gelecek saldırı riskinizi arttırabilir. Diğer görevler için, yerel bilgisayarda ayrıcalıklı olmayan bir kullanıcı olarak davranan ve herhangi bir uzak sunucuya anonim kimlik bilgileri sunan hesabı kullanmayı LocalService göz önünde bulundurun. Bu örnek, olay günlüğüne yazma iznine ihtiyaç duyduğundan hesabı kullanmayı LocalService denediğinizde başarısız olur.

Yükleyiciler hakkında daha fazla bilgi için bkz . Nasıl yapılır: Hizmet uygulamanıza yükleyici ekleme.

(İsteğe bağlı) Başlangıç parametrelerini ayarlama

Not

Başlangıç parametreleri eklemeye karar vermeden önce, hizmetinize bilgi geçirmenin en iyi yolunun bu olup olmadığını göz önünde bulundurun. Kullanımı ve ayrıştırılması kolay olsa da ve bir kullanıcı bunları kolayca geçersiz kılabilse de, bir kullanıcının belgeleri olmadan bulması ve kullanması daha zor olabilir. Genellikle, hizmetiniz birkaç başlatma parametresinden fazlasını gerektiriyorsa, bunun yerine kayıt defterini veya yapılandırma dosyasını kullanmanız gerekir.

Windows hizmeti komut satırı bağımsız değişkenlerini veya başlangıç parametrelerini kabul edebilir. başlatma parametrelerini işlemek için kod eklediğinizde, bir kullanıcı hizmet özellikleri penceresinde kendi özel başlangıç parametreleriyle hizmetinizi başlatabilir. Ancak, bu başlangıç parametreleri hizmetin bir sonraki başlatışında kalıcı olmaz. Başlangıç parametrelerini kalıcı olarak ayarlamak için bunları kayıt defterinde ayarlayın.

Her Windows hizmetinin HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services alt anahtarı altında bir kayıt defteri girdisi vardır. Her hizmetin alt anahtarı altında, hizmetinizin erişebileceği bilgileri depolamak için Parameters alt anahtarını kullanın. Windows hizmeti için uygulama yapılandırma dosyalarını, diğer program türleri için kullandığınız gibi kullanabilirsiniz. Örnek kod için bkz ConfigurationManager.AppSettings. .

Başlangıç parametreleri eklemek için

  1. Program.cs veya MyNewService.Tasarım Aracı'ı seçin. vb, ardından kısayol menüsünden Kodu Görüntüle'yi seçin. yönteminde Main bir giriş parametresi eklemek ve bunu hizmet oluşturucusunda geçirmek için kodu değiştirin:

    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
    
  2. MyNewService.cs veya MyNewService.vb içinde, oluşturucuyu MyNewService giriş parametresini aşağıdaki gibi işecek şekilde değiştirin:

    using System.Diagnostics;
    
    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;
    }
    
    Imports System.Diagnostics
    
    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
    

    Bu kod, olay kaynağını ve günlük adını kullanıcının sağladığı başlangıç parametrelerine göre ayarlar. Hiçbir bağımsız değişken sağlanmazsa, varsayılan değerleri kullanır.

  3. Komut satırı bağımsız değişkenlerini belirtmek için ProjectInstaller.cs veya ProjectInstaller.vb dosyasındaki sınıfına aşağıdaki kodu ProjectInstaller ekleyin:

    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
    

    Genellikle, bu değer Windows hizmeti için yürütülebilir dosyanın tam yolunu içerir. Hizmetin doğru şekilde başlatılması için, kullanıcının yol ve her parametre için tırnak işaretleri sağlaması gerekir. Kullanıcı, Windows hizmetinin başlangıç parametrelerini değiştirmek için ImagePath kayıt defteri girdisindeki parametreleri değiştirebilir. Ancak, daha iyi bir yol değeri program aracılığıyla değiştirmek ve işlevselliği bir yönetim veya yapılandırma yardımcı programı kullanarak kullanıcı dostu bir şekilde kullanıma açmaktır.

Hizmeti oluşturma

  1. Çözüm Gezgini'daMyNewService projesinin kısayol menüsünden Özellikler'i seçin.

    Projenizin özellik sayfaları görüntülenir.

  2. Uygulama sekmesindeki Başlangıç nesnesi listesinde MyNewService.Program'ı veya Visual Basic projeleri için Alt Ana'yı seçin.

  3. Projeyi oluşturmak için Çözüm Gezgini'de projenizin kısayol menüsünden Oluştur'u seçin (veya Ctrl ShiftBtuşlarına++ basın).

Hizmeti yükleme

Artık Windows hizmetini oluşturduğunuza göre yükleyebilirsiniz. Bir Windows hizmetini yüklemek için, yüklü olduğu bilgisayarda yönetici kimlik bilgileriniz olmalıdır.

  1. Yönetici kimlik bilgileriyle Visual Studio için Geliştirici Komut İstemi'ni açın.

  2. Visual Studio için Geliştirici Komut İstemi'nde projenizin çıkışını içeren klasöre gidin (varsayılan olarak, projenizin \bin\Debug alt dizini).

  3. Aşağıdaki komutu girin:

    installutil MyNewService.exe
    

    Hizmet başarıyla yüklenirse, komut başarıyı bildirir.

    Sistem installutil.exebulamazsa bilgisayarınızda olduğundan emin olun. Bu araç %windir%\Microsoft.NET\Framework[64]\<framework sürümü> klasörüne .NET Framework ile birlikte yüklenir. Örneğin, 64 bit sürümü için varsayılan yol %windir%\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe.

    installutil.exe işlemi başarısız olursa nedenini öğrenmek için yükleme günlüğünü denetleyin. Varsayılan olarak, günlük hizmet yürütülebilir dosyasıyla aynı klasördedir. Yükleme şu durumlarda başarısız olabilir:

    • Sınıf RunInstallerAttribute , sınıfta mevcut ProjectInstaller değildir.
    • özniteliği olarak trueayarlanmadı.
    • ProjectInstaller sınıfı olarak publictanımlanmamıştır.

Daha fazla bilgi için bkz . Nasıl yapılır: Hizmetleri yükleme ve kaldırma.

Hizmeti başlatma ve çalıştırma

  1. Windows'da Hizmetler masaüstü uygulamasını açın. Çalıştır kutusunu açmak için Windows+R tuşuna basın, services.msc yazın ve enter tuşuna basın veya Tamam'ı seçin.

    Hizmetinizin Hizmetler'de listelendiğini ve hizmet için ayarladığınız görünen ada göre alfabetik olarak görüntülendiğini görmeniz gerekir.

    Hizmetler penceresinde MyNewService.

  2. Hizmeti başlatmak için hizmetin kısayol menüsünden Başlat'ı seçin.

  3. Hizmeti durdurmak için hizmetin kısayol menüsünden Durdur'u seçin.

  4. (İsteğe bağlı) Komut satırından , hizmetinizi başlatmak ve durdurmak için net start <service name> ve net stop <service name> komutlarını kullanın.

Hizmetinizin olay günlüğü çıkışını doğrulama

  1. Windows'da Olay Görüntüleyicisi masaüstü uygulamasını açın. Windows arama çubuğuna Olay Görüntüleyicisi girin ve arama sonuçlarından Olay Görüntüleyicisi seçin.

    İpucu

    Visual Studio'da, Görünüm menüsünden Sunucu Gezgini'ni açıp (veya Ctrl+Alt+S tuşuna basarak) ve yerel bilgisayarın Olay Günlükleri düğümünü genişleterek olay günlüklerine erişebilirsiniz.

  2. Olay Görüntüleyicisi'daUygulama ve Hizmet Günlükleri'ne genişletin.

  3. Komut satırı bağımsız değişkenleri ekleme yordamını izlediyseniz MyNewLog (veya MyLogFile1 ) listesini bulun ve genişletin. Hizmetinizin gerçekleştirdiği iki eylemin (başlatma ve durdurma) girdilerini görmeniz gerekir.

    Olay günlüğü girişlerini görmek için Olay Görüntüleyicisi kullanın

Kaynakları temizleme

Windows hizmet uygulamasına artık ihtiyacınız yoksa uygulamayı kaldırabilirsiniz.

  1. Yönetici kimlik bilgileriyle Visual Studio için Geliştirici Komut İstemi'ni açın.

  2. Visual Studio için Geliştirici Komut İstemi penceresinde projenizin çıkışını içeren klasöre gidin.

  3. Aşağıdaki komutu girin:

    installutil.exe /u MyNewService.exe
    

    Hizmet başarıyla kaldırılırsa, komut hizmetinizin başarıyla kaldırıldığını bildirir. Daha fazla bilgi için bkz . Nasıl yapılır: Hizmetleri yükleme ve kaldırma.

Sonraki adımlar

Artık hizmeti oluşturduğunuza göre şunları yapabilirsiniz:

  • Başkalarının Windows hizmetinizi yüklemek için kullanması için tek başına bir kurulum programı oluşturun. Bir Windows hizmeti için yükleyici oluşturmak için WiX Araç Takımı'nı kullanın. Diğer fikirler için bkz. Yükleyici paketi oluşturma.

  • ServiceController Yüklediğiniz hizmete komut göndermenizi sağlayan bileşeni keşfedin.

  • Uygulama çalıştırıldığında olay günlüğünü oluşturmak yerine, uygulamayı yüklerken bir olay günlüğü oluşturmak için bir yükleyici kullanın. Uygulamayı kaldırdığınızda olay günlüğü yükleyici tarafından silinir. Daha fazla bilgi için bkz. EventLogInstaller.

Ayrıca bkz.