Öğ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.
Visual Studio Dosyamenüsünden Yeni Proje'yi> seçin (veya Ctrl+Shift+N tuşlarına basarak) Yeni Proje penceresini açın.
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.
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.
Çö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.
Açılır pencerede Evet'i seçin.
Tasarım sekmesinde, kısayol menüsünden Özellikler'i seçin. Özellikler penceresinde ServiceName değerini MyNewService olarak değiştirin.
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
Çözüm Gezgini'da, MyNewService.cs veya MyNewService.vb kısayol menüsünden Görünüm Tasarım Aracı'ni seçin.
Araç Kutusu'ndaBileşenler'i genişletin ve EventLog bileşenini Service1.cs [Tasarım] veya Service1.vb [Tasarım] sekmesine sürükleyin.
Çözüm Gezgini'daMyNewService.cs veya MyNewService.vb kısayol menüsünde Kodu Görüntüle'yi seçin.
Ö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şturucuyuNew()
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
using
Ad alanı için System.DiagnosticsMyNewService.cs dosyasına bir deyim (henüz yoksa) veya MyNewService.vb dosyasına birImports
deyim ekleyin:using System.Diagnostics;
Imports System.Diagnostics
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 Timer
MyNewService.OnStart
özelliklerini ayarlayın. - yöntemini çağırarak zamanlayıcıyı Start başlatın.
Yoklama mekanizmasını ayarlama
using
Ad alanı için System.TimersMyNewService.cs dosyasına bir deyim veya MyNewService.vb dosyasına birImports
deyim ekleyin:using System.Timers;
Imports System.Timers
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()
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
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
using
Ad alanı için System.Runtime.InteropServicesMyNewService.cs dosyasına bir deyim veya MyNewService.vb dosyasına birImports
deyim ekleyin:using System.Runtime.InteropServices;
Imports System.Runtime.InteropServices
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öntemlerinizOnStart
uzun süre çalıştırılırsa, hizmetiniz artımlıdwCheckPoint
bir değerle yeniden çağırarakSetServiceStatus
daha fazla zamanOnStop
isteyebilir.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
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)
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)
(İ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ürinOnStop
.Ö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.
Çözüm Gezgini'daMyNewService.cs veya MyNewService.vb kısayol menüsünden Görünüm Tasarım Aracı'ni seçin.
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ı
ProjectInstaller
bir bileşen sınıfı ekler. Bu yükleyiciler hizmetinize ve hizmetin ilişkili işlemine yöneliktir.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.
Özellikler penceresinde özelliğin ServiceNameMyNewService olarak ayarlandığını doğrulayın.
Ö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.
Ö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).StartType Özelliğini Automatic açılan listeden olarak ayarlayın.
İşiniz bittiğinde Özellikler pencereleri aşağıdaki şekilde görünmelidir:
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
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
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.
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
Çözüm Gezgini'daMyNewService projesinin kısayol menüsünden Özellikler'i seçin.
Projenizin özellik sayfaları görüntülenir.
Uygulama sekmesindeki Başlangıç nesnesi listesinde MyNewService.Program'ı veya Visual Basic projeleri için Alt Ana'yı seçin.
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.
Yönetici kimlik bilgileriyle Visual Studio için Geliştirici Komut İstemi'ni açın.
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).
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
true
ayarlanmadı. ProjectInstaller
sınıfı olarakpublic
tanımlanmamıştır.
- Sınıf RunInstallerAttribute , sınıfta mevcut
Daha fazla bilgi için bkz . Nasıl yapılır: Hizmetleri yükleme ve kaldırma.
Hizmeti başlatma ve çalıştırma
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.
Hizmeti başlatmak için hizmetin kısayol menüsünden Başlat'ı seçin.
Hizmeti durdurmak için hizmetin kısayol menüsünden Durdur'u seçin.
(İ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
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.
Olay Görüntüleyicisi'daUygulama ve Hizmet Günlükleri'ne genişletin.
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.
Kaynakları temizleme
Windows hizmet uygulamasına artık ihtiyacınız yoksa uygulamayı kaldırabilirsiniz.
Yönetici kimlik bilgileriyle Visual Studio için Geliştirici Komut İstemi'ni açın.
Visual Studio için Geliştirici Komut İstemi penceresinde projenizin çıkışını içeren klasöre gidin.
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.