C# ile Windows Service

0
1747

Bu yazımızda Visual Studio C# (CSharp) ile çalışırken gözü Windows Service seçeneğine takılanlar için basit bir uygulama ve yalın bir anlatım ile akıllardaki ilk soru işaretini almak isterim.

Öncelikle bu servisin (bir windows kullanıcısıysanız) bilgisayarımızdaki Servisler uygulamasında görüntülenen servisler ile aynı olduğunu belirtmek isterim.Gerekli ayarları diğer servisler gibi üzerinde bulunduruyor ve ne yapması tamamen hayal gücünüze kalmış.

Windows Service uygulamalarına başlarken eğer formdan başka bir yerde kodlamamışsanız burası size biraz yabancı gelebilir. Karşınıza bir konsol ekranı geliyor sadece. Formdan bir diğer göze batan farkı ise debug şekli. Service çalıştırmayı size detaylı bir şekilde sunmayacağım çünkü yeterince bununla ilgili kaynak var. Ben sadece aklınızdaki birtakım soruları almak için üzerinden biraz anlatacağım.

Projemizi çalıştırmak için öncelikle Service paneline sağ tık diyerek add installer yapıyoruz. Burada bbir takım ayarlar bulunmakta. Servisin görüntülenen ismi veya kimlerin erişebileceği ile alakalı. Sonrasında servisimizi debug yapıyoruz ancak hata verecek. Bunu yapmamızın nedeni ise bazı exe dosyalarına erişebilmek için onları önce oluşturmalıyız. Oluşturduktan sonra proje dosyamızın içerisindeki debug kısmından sonraki uygulamayı açan exe’nin yolunu alıyoruz. Sonra C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe benim bilgisayarım ve bir çoğumuzun bilgisayarındaki bu konum ile birleştirmemiz gerekmektedir. Bunun için cmd yönetici olarak başlatın ve ilk önce InstallUtil.exe konumunu girin ve bir boşluk bıraktıktan sonra ilk aldığımız konumu girin. Enter’a bastıktan sonra her şey yolunda ise kurulum tamamlanacak ve servisinizi Windows Services kısmında görebileceksiniz. Windows servisinizi silmek için ise bu komutu kullanabilirsiniz: sc delete “Servis Adi”.

Tanıtım ve Install için bu kadar bilginin şimdilik yeterli olduğunun düşüncesindeyim. Şimdi ise basit bir örnek programa bakalım. C# Windows Service ile Text dosyasına veri yazdırma:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks;
using System.Timers;

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

    Timer timer = new Timer();



    protected override void OnStart(string[] args) //Servis çalışmaya //başlayınca
    {
//Dosyamıza servis başlangıç zamanını yazdırıyoruz ve timer ayarlarını //yapıyoruz.
        WriteToFile("Service is started at " + DateTime.Now);
        timer.Elapsed += new ElapsedEventHandler(OnElapsedTime);
        timer.Interval = 5000;
        timer.Enabled = true;
    }

    protected override void OnStop() //Servis durunca yapılacaklar.
    {
        WriteToFile("Service is recall at " + DateTime.Now);
    }

    private void OnElapsedTime(Object source, ElapsedEventArgs e) //Programda bir nesne oluşturduk ve servisin çalışmaya devam ettiği durumda //yapılacakları yazdık.
    {
        WriteToFile("Service is recall at " + DateTime.Now);
    }

    private void WriteToFile(string Message)
    {
        string path = AppDomain.CurrentDomain.BaseDirectory + "\\Log"; 
//path değişkenine yolu tanımladık.
        if (!Directory.Exists(path))
        {//if ile şunu diyoruz: Eğer bu yolda(path) Log isimli bir dosya //yoksa bu yol üzerine Logisimli bir dosya oluştur.
            Directory.CreateDirectory(path);
        }
        string filepath = AppDomain.CurrentDomain.BaseDirectory + "\\Log\\ServiceLog_" + DateTime.Now.Date.ToShortDateString().Replace('/', '_') + ".txt";
//Buradaki değişkenimize not defterinin yolunu ve ismini atıyoruz.
        if (!File.Exists(filepath))
        {
//Buradaki if şartımız şunu diyor: Eğer bu konumda ve bu isimde(filepath) //bir dosya yoksa bu konuma bu isimde(filepath) br dosya oluştur. 
            using (StreamWriter sw = File.CreateText(filepath))
            {
                sw.WriteLine(Message);
            }

        }
        else
        {
//eğer bu konumda böyle bir dosya(filepath) varsa mesajımı(Message) yazdır.
            using (StreamWriter sw = File.AppendText(filepath))
            {
                sw.WriteLine(Message);
            }
        }

    }
}
}

Umarım açıklayıcı bir yazı olmuştur. Bu yazım maalesef ülkemizdeki kaynak sorunlarını yavaş yavaş çözmeye çalışan arkadaşlara destek olması amacı ile yazıyorum. İlerleyen dönemlerde farklı service uygulamaları bulursam onları da sizinle paylaşacağım. Gelişmiş ve gelişmeye devam Türkiye için kendinizi geliştirin. Esen kalın.

CEVAP VER

Please enter your comment!
Please enter your name here