Windows Service Oluşturma

3
3308

Bu yazımızın konusu windows service . Windows service arka planda çalışan, otomatik olarak çalışan, bir arayüz olmayan veya bir çıktısı bulunmayan sistemlerdir.  İşletim sistemlerinin arkasında çalışan programlar olarak değerlendirebiliriz. Dosya aktarımı güncelleme kontrolü log tutma gibi işlemlerin otomatik yapılması gibi olayları gerçekleştirebiliriz.

Windows arama kısmına Services yazdığımızda karşımıza servisler çıkmaktadır. Bunlara sağ tıklayıp > özellikler dedikten sonra karşımıza bazı özellikler gelmektedir. Burada başlangıç türünü, servisin ne zaman başlayacağını otomatik veya manuel olarak belirleyebiliriz. Görünen ad ve açıklama kısımlarını da değiştirmek mümkündür.  Buradan servisi başlat durdur duraklat gibi seçeneklerle kontrol edebilmekteyiz. Örneğin kendi yazacağımız servisin çalışmasının durdumak için bu yolu seçebiliriz.

Windows Service Oluşturma Ayarları

Öncelikle Visual Studio içinden New Project diyoruz. Ardından Windows Service seçeneğini seçiyoruz. Karşımıza şu ekran geliyor.

Bu ekrandan sağ tıklayacağız. Ardından Add Installer seçeneğini tıklıyoruz. Burada karşımızıa bir adet Service Installer ve Service Process Installer geliyor. Service Installer üzerine gelip sağ tıklayıp özellikler kısmına gidiyoruz. Burada isim açıklama başlama tipini ekranda görünecek adını belirliyoruz. Daha sonra Service process Installer üzerine tıklayıp özelliklere gidiyoruz. Burada da Account kısmını değiştiriyoruz. Burayı Local System olarak işaretliyoruz.

Daha sonra sağ tarafta Service 1 üzerine geliyoruz. Kaynak kodu görüntüle dediğimiz zaman karşımıza servise ait düzenleyeceğimiz kodlar geliyor. Burada OnStart() ve OnStop() olarak iki fonksiyonumuz bulunmaktadır. Adından da anlaşılacağı gibi servisin başlangıç ve kapatma durumunda neler yapılacağını belirliyoruz.

public partial class Service1 : ServiceBase
   {
       public Service1 ()
       {
           InitializeComponent ();
       }

       protected override void OnStart (string[] args)
       {
       }

       protected override void OnStop ()
       {
       }
   }

 

Windows Service Oluşturma

Asıl işlemi yapacağımız yere geçersek öncelikle InnerOperation adından bir class oluşturuyoruz. Yazacağımız class kaynak klasörüne 5 saniye aralıklarla bir log yazacak ve servisin çalışır halde olduğunu göreceğiz. Bunun yanında başlangıç ve bitişlerde de mesajı text dosya içerisine yazacak. Daha önceki Logger Kullanımı yazısında dosya oluşturma ve dosya yazma işlemlerini anlatmıştım. Timer konusunu ise  Thread işlemleri  yazısında kullanmıştım.

public  class InnerOperation
   {
       Timer timer = new Timer ();
       public void Start ()
       {
           WriteToFile ("Service Başladı "+DateTime.Now);
           timer.Elapsed+=new ElapsedEventHandler (OnElapsedTime);
           timer.Interval=5000;
           timer.Enabled=true;
       }
       public void Stop ()
       {
           WriteToFile ("Service Durduruldu "+DateTime.Now);
       }

       public void WriteToFile (string Message)
       {
           string path = AppDomain.CurrentDomain.BaseDirectory+"\\Logs";
           if (!Directory.Exists (path))
           {
               Directory.CreateDirectory (path);
           }
           string filepath = AppDomain.CurrentDomain.BaseDirectory+"\\Logs\\ServiceLog_"+DateTime.Now.Date.ToShortDateString ().Replace ('/', '_')+".txt";
           if (!File.Exists (filepath))
           {

               using (StreamWriter sw = File.CreateText (filepath))
               {
                   sw.WriteLine (Message);
               }
           }
           else {
               using (StreamWriter sw = File.AppendText (filepath))
               {
                   sw.WriteLine (Message);
               }
           }
       }
       private void OnElapsedTime (object source, ElapsedEventArgs e)
       {
           WriteToFile ("Service Message ! berkarat.com :    "+DateTime.Now);
       }
   }

 

Bu class içerisini de oluşturduktan sonra serviste oluşacak onstart ve onstop fonksiyonlarının içerisine start ve stop fonksiyonlarımızı çağırıyoruz. Ardından derleme işlemini gerçekleştiriyoruz. Standart bir console app uygulaması gibi bir exe oluşuyor.

InnerOperation obj = new InnerOperation ();
      protected override void OnStart (string[] args)
      {
          obj.Start ();
      }
      protected override void OnStop ()
      {
          obj.Stop();
      }

Windows Servis Yükleme

Daha sonra cmd komut satırını yönetici olarak olarak çalıştırıyoruz.  Daha sonra aşağıdaki dosya yolu üzerinden InstallUtil.exe ile servisi sisteme yüklemiş oluyoruz. Sonra servisi çalıştırıyoruz. Artık kaynağımıza servis çalışmasına dair loglar yazılmaya başlamış oluyor.

 C:\Windows\Microsoft.NET\Framework64\v4.0.30319>InstallUtil.exe "C:\Users\berk\Documents\Visual Studio 2015\Projects\Service_berkarat.com\Service_berkarat.com\bin\Debug\Service_berkarat.com.exe"

Windows Service Başlatma

Servisi Hizmetler kısmına geliyoruz. Windows Service display name olarak verdiğimiz isimle görünmektedir. Buraya sağ tıklayıp çalıştır durdur veya restart et gibi işlemler uygulayabiliriz.

Burada da göreceğimiz gibi loglar tarih olarak yazılıyor.

 

 

3 YORUMLAR

CEVAP VER

Please enter your comment!
Please enter your name here

This site uses Akismet to reduce spam. Learn how your comment data is processed.