C# ile Windows Service Oluşturma ve Kullanımı - Berk Arat
Ana Sayfa Yazılım C# Windows Service Oluşturma
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.
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
WriteToFile ("Service Başladı "+DateTime.Now);
timer.Elapsed+=new ElapsedEventHandler (OnElapsedTime);
WriteToFile ("Service Durduruldu "+DateTime.Now);
public void WriteToFile (string Message)
string path = AppDomain.CurrentDomain.BaseDirectory+"\\Logs";
string filepath = AppDomain.CurrentDomain.BaseDirectory+"\\Logs\\ServiceLog_"+DateTime.Now.Date.ToShortDateString ().Replace ('/', '_')+".txt";
if (!File.Exists (filepath))
using (StreamWriter sw = File.CreateText (filepath))
using (StreamWriter sw = File.AppendText (filepath))
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 ();
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.
Önceki İçerikC# AES 256 Şifreleme ve Deşifreleme
Sonraki İçerikC# DragDrop Kullanımı ve Örnek Uygulama