05 December 2016

Windows Servisleri Yazma

Windows servisleri işletim sistemi başladığında otomatik başlayan, kullanıcı arabirimi olmayan uygulamalardır.

Kullanıcıdan bağımsız olarak arka planda çalışırlar. Servis gerçekleştiğinde işlemler Log tutulabilir. Herhangi bir sistem yöneticisi tarafından başlatılabilirler. Herhangi bir kullanıcı sisteme giriş yaptığında otomatik olarak başlayabilirler.

Öncelikle bu servislere bir göz atalım:

Control Panel –> Administrative Tools –> Services yolu üzerinde çalışan tüm servisleri görebiliriz. Herhangi bir servise tıkladığımızda bu servisin General, Log On, Recovery ve Dependencies sekmeleri olduğunu görebiliriz. Aynı zamanda tüm servislerin açıldığı pencereden her servisin Name, Description, Startup Type ve Log On As özelliklerinin
olduğunu görebiliriz.

Windows Servisleri

Control Panel –> Administrative Tools –> Event Viewer –> Windows Logs sekmesinin altında ise Windows altında çalışan tüm programların loglarına bakabiliriz.

Şimdi basit bir Windows Servisi yapalım. Visual Studio programında öncelikle Windows –> Windows Service kısmından bir adet yeni servis dosyası açalım. (ServiceBir) Bu dosyanın kod kısmına F7 ile geçebiliriz. İncelediğimizde
OnStart, OnStop, OnContinue, OnPause, OnShutdown metodlarını override ettiğimizi görebiliriz.

Öncelikle bir adet Timer ekleyeceğiz. Bunun için Toolbox’da sağ tıklayıp Choose Items Seçiyoruz. Açılan Pencerede Timer aratıp, System.Timers namespace’nin altında bulunan Timer kontrolünü toolboxa ekleyelim.

Windows Servisleri Yazma

Timer’ı sürükleyip formun üzerine bırakalım. Kodlarımızı yazalım. Yazdığımız windows servisimiz sistem saatini 5 saniyede bir text dosyasına yazacak.

public Service1()
 {
 InitializeComponent();
 timer1.Elapsed += new System.Timers.ElapsedEventHandler(timer1_Elapsed);
 }
void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
 {
 StreamWriter sw = new StreamWriter(@"C:\servisCiktisi.txt", true, Encoding.GetEncoding("windows-
 1254"));
 sw.WriteLine(DateTime.Now.ToString());
 sw.Close();
 }

Timer’ın Interval değerini 5000 olarak ayarlayalım. Service.cs dosyasına sağ tıklayıp Add Installer seçeneğini seçelim.

Windows Servisleri 3

serviceProcessInstaller1 özelliklerinden Account u LocalSystem olarak seçelim.
serviceInstaller1 özelliklerinden DisplayName, Description ve ServiceName kısımlarını dolduralım.

F6 ile projeyi derleyelim.

Yazdığımız Windows Servisini kuralım.

Visual Studio Command Prompt 2010 çalıştıralım. komut satırına cd servisin yolunu
yazalım. Örnek: cd C:\Users\antogrenci\Desktop\newprojects\ServiceBir\ServiceBir\bin\Debug

Enter.

installutil ServiceBir.exe

Buraya kadar servisimizi kurmuş olduk.

Çalıştıp log dosysını oluşturduğunu görebiliriz. Servisi başlatmak için Start işaretleyeceğiz.

Servisi kaldırmak için komut satırına sadece:

installutil -u ServiceBir.exe

yazmamız gerekir.

serviceInstaller1 özelliklerinden ServicesDependedOn seçeneğinden servisi başka bir servise bağımlı hale getirebiliriz.

Servis kurmanın bir başka yolu da Setup project oluşturmaktır. Ona da sonraki notlarımda yer vereceğim.

Comments

  1. Makale için teşekkürler.
    Dediklerinizi uyguladım ve servisi kurmayı başardım. Ancak servisi başlat dediğimde Visual Studio Just-In-Time Debugger açılıyor ve debug etmezsem servis kurulamıyor. İşin kötü tarafı ise debug et diyorum ve Visual Studio versiyonunu seçiyorum. Programda hata buluyor, “Error 1053: The service did not response to the start or control request in a timely fashion.” hatasını verip servisi başlatamıyorum. Sizin yazdığınız kodun aynını çalıştırıyorum. Pekii, bu hatayı neden alıyor olabilirim?