Öğretici: Windows hizmeti uygulaması oluşturma
Uyarı
Bu belge, Windows hizmetinin en son sürümü için değildir. Kullanarak Windows Hizmetleri için en son içerik BackgroundService ve çalışan hizmeti şablonu için bkz:
Bu makalede, bir olay günlüğüne Windows bir Visual Studio hizmet uygulamasının nasıl oluşturularak nasıl oluşturul açıklanmıştır.
Hizmet oluşturma
Başlamak için projeyi oluşturun ve hizmetin düzgün çalışması için gereken değerleri ayarlayın.
Yeni dosya Visual Studio Menüsünden Yeni Project > 'ı seçin (veya Ctrl + Shift + N tuşlarına basarak) Yeni Project açın.
Windows Service (.NET Framework) proje şablonunu seçin. Bunu bulmak için Yüklü ve Visual C# seçeneğini genişletin veya Visual Basic'ı seçin ve ardından Masaüstü'Windows seçin. Veya sağ Windows arama kutusuna Service hizmeti yazın ve Enter tuşuna basın.

Not
Windows Service şablonunu görmüyorsanız .NET masaüstü geliştirme iş yükünü yüklemeniz gerekir:
Yeni Çalışma Project iletişim kutusunda sol alt Visual Studio Yükleyicisi Aç'ı seçin. .NET masaüstü geliştirme iş yükünü ve ardından Değiştir'i seçin.
Ad alanına MyNewService girin ve Tamam'ı seçin.
Tasarım sekmesi görünür (Service1.cs [Tasarım] veya Service1.vb [Tasarım]).
Proje şablonu, 'den devralan adlı
Service1bir bileşen sınıfı System.ServiceProcess.ServiceBase içerir. Hizmeti başlatma kodu gibi temel hizmet kodunun büyük bir fazlasını içerir.
Hizmeti yeniden adlandırma
Hizmeti Service1 yerine MyNewService olarak yeniden adlandırabilirsiniz.
Bu Çözüm Gezgini Service1.cs veya Service1.vb seçeneğini belirleyin 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 istemeyebilirsiniz diye 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.

Dosya menüsünden Hepsini Kaydet'i seçin.
Hizmete özellik ekleme
Bu bölümde, Windows hizmetine özel bir olay günlüğü Windows eklersiniz. Bileşen, EventLog bir hizmet için bir Windows bileşenin türü örneğidir.
Özel olay günlüğü işlevselliği ekleme
Bu Çözüm Gezgini, MyNewService.cs veya MyNewService.vb kısayol menüsünden öğesini Görünüm Tasarımcısı.
Araç Kutusu'da Bileşenler'i genişletin ve ardından EventLog bileşenini Service1.cs [Tasarım] veya Service1.vb [Tasarım] sekmesine sürükleyin.
Bu Çözüm Gezgini, MyNewService.cs veya MyNewService.vb kısayol menüsünden Kodu Görüntüle'yi seçin.
Özel bir olay günlüğü tanımlayın. C# için mevcut oluşturucunu
MyNewService()düzenleyin; Visual Basic için oluşturucuNew()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 SubAd alanı
usingiçin MyNewService.cs'ye bir deyimi (henüz yoksa) veyaImportsMyNewService.vb System.Diagnostics deyimini ekleyin:using System.Diagnostics;Imports System.DiagnosticsDosya menüsünden Hepsini Kaydet'i seçin.
Hizmet başlatıldığında ne olduğunu tanımlama
MyNewService.cs veya MyNewService.vb kod düzenleyicisinde yöntemini OnStart bulun; Visual Studio oluşturulduğunda otomatik olarak boş bir yöntem tanımı oluşturulur. Hizmet başladığında olay günlüğüne bir giriş yazan kodu 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ıştıracak şekilde tasarlanmasa da, genellikle yönteminde ayar varsayılan olarak sistemi yoklar veya OnStart izler. Yöntemin, sistemin engellenmiş olması için hizmetin işlemi başlatıldıktan sonra OnStart işletim sistemine dönmesi gerekir.
Basit bir yoklama mekanizması ayarlamak için bileşenini System.Timers.Timer kullanın. Zamanlayıcı, düzenli Elapsed aralıklarla bir olay yapar ve bu sırada hizmetiniz izlemesini yapar. Bileşeni aşağıdaki Timer gibi kullanırsiniz:
- yönteminde Timer bileşenin özelliklerini
MyNewService.OnStartayarlayın. - yöntemini çağırarak zamanlayıcıyı Start başlatma.
Yoklama mekanizmasını ayarlayın.
Yoklama mekanizmasını
MyNewService.OnStartayarlamak için olayına 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()Ad alanı
usingiçin MyNewService.cs'ye deyimini veyaImportsMyNewService.vb'ye System.Timers deyimini ekleyin:using System.Timers;Imports System.Timerssınıfında,
MyNewServiceolayı işlemek için yönteminiOnTimerTimer.Elapsed ekleyin: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 Subsınıfında,
MyNewServicebir ü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
Tüm çalışmalarını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 durdurulurken ne olduğunu tanımlama
Hizmet durdurulurken olay OnStop günlüğüne bir giriş ekleyen yöntemine bir kod satırı ekler:
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 OnPause ek işleme tanımlamak üzere , ve yöntemlerini geçersiz OnContinue OnShutdown kılarak.
Aşağıdaki kod, sınıfında yöntemini geçersiz OnContinue kılmayı 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, durumlarını Hizmet Denetimi Yöneticisi'ne bildirerek bir kullanıcının bir hizmetin düzgün şekilde çalışma durumunu bildirerek çalışmasını sağlar. Varsayılan olarak, raporlardan devralınan bir hizmet, SERVICE_STOPPED, SERVICE_PAUSED ve ServiceBase SERVICE_RUNNING. Bir hizmetin başlaması biraz zaman alıyorsa, bir hizmet durumunu SERVICE_START_PENDING yararlı olur.
SetServiceStatus SERVICE_START_PENDING SERVICE_STOP_PENDING çağıran kod ekleyerek uygulama ve Windows ayarlarını gerçekleştirebilirsiniz.
Hizmet bekleme durumu uygulama
Ad alanı
usingiçin MyNewService.cs'ye deyimini veyaImportsMyNewService.vb'ye System.Runtime.InteropServices deyimini ekleyin:using System.Runtime.InteropServices;Imports System.Runtime.InteropServicesAşağıdaki kodu MyNewService.cs veya MyNewService.vb'ye ekleyin. Değerleri bildirin ve bir platform çağrısında kullanmak üzere durum için bir yapı
ServiceStateekleyin: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 StructureNot
Service Control Manager, SERVICE_STATUS hizmetinin başlaması veya kapanması için ne kadar bekleme süresi olduğunu belirlemek
dwWaitHintdwCheckpointiçin Windows yapısının ve üyelerini kullanır. veOnStartOnStopyöntemleriniz uzun süre çalıştırılırsa, hizmetiniz artan bir değerle yenidenSetServiceStatusçağırarak daha fazla zamandwCheckPointisteğinde olabilir.sınıfında,
MyNewServiceplatform çağırmayı 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 BooleanAşağıdaki SERVICE_START_PENDING uygulamak için yönteminin başına aşağıdaki kodu OnStart 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 şu şekilde ayarlamak için
OnStartyönteminin sonuna kod 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)(İsteğe bağlı) uzun OnStop süre çalışan bir yöntem ise, yönteminde bu yordamı
OnStopyineler. Yöntemden SERVICE_STOP_PENDING önce uygulama durumunu SERVICE_STOPPEDOnStopdurumuna geri döner.Ö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ükleyiciler ekleme
Bir Windows çalıştırmadan önce, hizmeti Service Control Manager'a kaydeden yüklemeniz gerekir. Kayıt ayrıntılarını işlemek için projenize yükleyiciler ekleyin.
Bu Çözüm Gezgini, MyNewService.cs veya MyNewService.vb kısayol menüsünden öğesini Görünüm Tasarımcısı.
Tasarım görünümünde arka plan alanı seçin ve ardından kısayol menüsünden Yükleyici Ekle'yi seçin.
Varsayılan olarak Visual Studio, projenize iki
ProjectInstalleryükleyici içeren adlı bir bileşen sınıfı ekler. Bu yükleyiciler hizmetinize ve hizmetin ilişkili sürecine yöneliktir.ProjectInstaller tasarım görünümünde, Visual C# projesi için serviceInstaller1'i veya bir Visual Basic projesi için ServiceInstaller1'i seçin ve ardından kısayol menüsünden Özellikler'i seçin.
Özellikler penceresinde özelliğinin ServiceName MyNewService olarak ayar olduğunu doğrulayın.
Özelliğine Description örnek hizmet gibi metin ekleyin.
Bu metin Hizmetler penceresinin Açıklama sütununda görünür ve hizmeti kullanıcıya açıklar.

özelliğine metin DisplayName 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 farklı olabilir (örneğin, hizmetinizi başlatmak için ServiceName
net startkomut için kullanabileceğiniz ad).Açılan StartType listeden Automatic özelliğini olarak ayarlayın.
Bitirdikten sonra Özellikler pencerelerini aşağıdaki şekilde görüntülemeniz gerekir:

ProjectInstaller için Tasarım görünümünde, Visual C# projesi için serviceProcessInstaller1'i, bir Visual Basic projesi için ServiceProcessInstaller1'i ve ardından kısayol menüsünden Özellikler'i seçin. Açılan Account listeden LocalSystem özelliğini olarak ayarlayın.
Bu ayar hizmeti yüker 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 sahip. 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 görev alan ve herhangi bir uzak sunucuya anonim kimlik bilgileri sunan LocalService hesabı kullanmayı göz önünde bulundurabilirsiniz. Hesabı kullanmaya çalışmanız durumunda bu örnek LocalService başarısız olur çünkü olay günlüğüne yazma izni olması gerekir.
Yükleyiciler hakkında daha fazla bilgi için bkz. Nasıl 2.
(İsteğe bağlı) Başlangıç parametrelerini ayarlama
Not
Başlangıç parametreleri eklemeye karar vermeden önce, bunun hizmetinize bilgi geçişinin en iyi yolu olup olmadığını göz önünde bulundurabilirsiniz. Kullanımı ve ayrıştırması kolay olsa da ve bir kullanıcı bunları kolayca geçersiz kabiliyor olsa da, bir kullanıcının belge olmadan bulması ve kullanması daha zor olabilir. Genellikle, hizmetiniz birden fazla başlangıç parametresi gerektiriyorsa, bunun yerine kayıt defterini veya yapılandırma dosyasını kullansanız iyi olur.
Bir Windows, komut satırı bağımsız değişkenlerini veya başlangıç parametrelerini kabul eder. Başlangıç parametrelerini işlemeye kod eklerken, bir kullanıcı hizmetinizi hizmet özellikleri penceresinde kendi özel başlangıç parametreleriyle başlatabilir. Ancak, hizmet bir sonraki başlatıldığında bu başlangıç parametreleri kalıcı olmaz. Başlangıç parametrelerini kalıcı olarak ayarlamak için kayıt defterinde ayarlayın.
Her Windows, hizmet alt anahtarı altında bir kayıtHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services vardır. Her hizmetin alt anahtarının altında, hizmetinizin erişirken kullanabileceği bilgileri depolamak için Parametreler alt anahtarını kullanın. Uygulama yapılandırma dosyalarını, bir Windows diğer program türleri için olduğu gibi kullanabilirsiniz. Örnek kod için ConfigurationManager.AppSettings bkz. .
Başlangıç parametreleri eklemek için
Program.cs veya MyNewService.Designer.vb öğesini seçin ve ardından kısayol menüsünden Kodu Görüntüle'yi seçin.
Mainyönteminde, bir giriş parametresi eklemek ve bunu hizmet oluşturucusuza iletir: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 SubMyNewService.cs veya MyNewService.vb içinde, giriş parametresini işlemesi
MyNewServiceiçin oluşturucusu şu ş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 SubBu kod, olay kaynağını ve günlük adını kullanıcının temini olan başlangıç parametrelerine göre ayarlar. Bağımsız değişken sağlanmadı ise varsayılan değerleri kullanır.
Komut satırı bağımsız değişkenlerini belirtmek için aşağıdaki kodu
ProjectInstallerProjectInstaller.cs veya ProjectInstaller.vb'de sınıfına 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 SubGenellikle bu değer, Windows hizmeti için yürütülebilir dosyanın tam yolunu içerir. Hizmetin doğru şekilde başlaması için, kullanıcının yol ve her parametre için tırnak işareti belirt olması gerekir. Bir kullanıcı ImagePath kayıt defteri girdisinde parametreleri değiştire bir hizmet için başlangıç parametrelerini Windows değiştirebilir. Ancak, değeri program aracılığıyla değiştirmek ve işlevselliği yönetim veya yapılandırma yardımcı programı gibi kullanımı kolay bir şekilde ortaya çıkarmak daha iyi bir yoldur.
Hizmeti oluşturma
Bu Çözüm Gezgini, MyNewService projesinin kısayol menüsünden Özellikler'i seçin.
Projenizin özellik sayfaları görüntülenir.
Uygulama sekmesinde, Başlangıç nesne listesinde MyNewService.Program'ı veya Yeni projeler için Alt Ana Visual Basic seçin.
Projeyi derlemek için, Çözüm Gezgini projenizin kısayol menüsünden Oluştur'a tıklayın (veya Ctrl Shift B + + tuşlarına basın).
Hizmeti yükleme
Windows hizmetini Windows yükleyebilirsiniz. Bir Windows yüklemek için, yüklü olduğu bilgisayarda yönetici kimlik bilgileriniz olmalıdır.
Yönetici Geliştirici Komut İstemi bilgileriyle Visual Studio için oturum açma bilgilerini açın.
Geliştirici Komut İstemi için Visual Studio dizininde projenizin çıkışını içeren klasöre gidin (varsayılan olarak projenizin \bin\Debug alt dizini).
Aşağıdaki komutu girin:
installutil MyNewService.exeHizmet başarıyla yüklenirse komut başarılı olduğunu raporlar.
Sistem bilgisayarınızda installutil.exe, bilgisayarınızda mevcut olduğundan emin olun. Bu araç% windir%\Microsoft.NET\Framework[64] framework sürümü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.
Yükleme installutil.exe başarısız olursa, bunun neden olduğunu bulmak için yükleme günlüğünü kontrol edin. Varsayılan olarak günlük, hizmet yürütülebilir dosyasıyla aynı klasördedir. Aşağıdakiler başarısız olabilir:
- RunInstallerAttributesınıfı, sınıfında
ProjectInstallermevcut değil. - özniteliği olarak ayar
truedeğil. ProjectInstallersınıfı olarak tanımlanmamıştır.public
- RunInstallerAttributesınıfı, sınıfında
Daha fazla bilgi için, bkz. How to: Install and uninstall services.
Hizmeti başlatma ve çalıştırma
Bu Windows Hizmetler masaüstü uygulamasını açın. R + Windows'a basarak Çalıştır kutusunu açın, services.msc yazın ve Enter tuşuna basın veya Tamam'ı seçin.
Hizmetinizin Hizmetler'de listelenmiş olduğunu ve hizmet için ayarlanmış görünen adla alfabetik olarak görüntülendiğinden emin olmak 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ünde Durdur'a tıklayın.
(İsteğe bağlı) Hizmetinizi başlatmak ve durdurmak için komut satırına net start < service name > ve net stop service < name > komutlarını kullanın.
Hizmetinizin olay günlüğü çıktısını doğrulama
Bu Windows masaüstü Olay Görüntüleyicisi açın. Arama Olay Görüntüleyicisi çubuğuna Windows girin ve ardından arama sonuçlarından Olay Görüntüleyicisi'yi seçin.
İpucu
Bu Visual Studio, Görünüm menüsünden Sunucu Gezgini 'ı açarak (veya Ctrl Alt S tuşlarına basarak) ve yerel bilgisayarın Olay Günlükleri düğümünü genişleterek olay + + günlüklerine erişebilirsiniz.
Uygulama Olay Görüntüleyicisi'de Uygulama ve Hizmet Günlükleri'ne genişletin.
MyNewLog (veya komut satırı bağımsız değişkenleri ekleme yordamını izlediyebilirsiniz MyLogFile1) listesini bulun ve genişletin. Hizmetinizin gerçekleştirilen iki eylemin (başlat ve durdur) girişlerini görüyor gerekir.

Kaynakları temizleme
Windows service uygulamasına artık ihtiyacınız yoksa uygulamayı kaldırabilirsiniz.
Yönetici Geliştirici Komut İstemi bilgileriyle Visual Studio için oturum açma bilgilerini açın.
Geliştirici Komut İstemi için Visual Studio penceresinde projenizin çıkışını içeren klasöre gidin.
Aşağıdaki komutu girin:
installutil.exe /u MyNewService.exeHizmet başarıyla kaldırılırsa, komut hizmetinizin başarıyla kaldırılmış olduğunu raporlar. Daha fazla bilgi için, bkz. How to: Install and uninstall services.
Sonraki adımlar
Artık hizmeti oluşturduğunuza göre şunları da sabilirsiniz:
Başkalarının kendi hizmet yüklerinizi yüklemek için kullanabileceği tek başına bir kurulum Windows oluşturun. WiX Araç Seti'ne sahip bir hizmet için bir yükleyici Windows kullanın. Diğer fikirler için bkz. Yükleyici paketi oluşturma.
Yüklemiş ServiceController olduğunu hizmete komut göndermenizi sağlayan bileşeni keşfedin.
Uygulama çalıştırıken olay günlüğünü oluşturmak yerine yükleyiciyi kullanarak uygulamayı yükleme sırasında bir olay günlüğü oluşturun. Uygulamayı kaldırdığınız zaman olay günlüğü yükleyici tarafından silinir. Daha fazla bilgi için bkz. EventLogInstaller.