Makale Özeti

Bir önceki makalede arkaplanda çalışarak çeşitli işlemler gerçekleştirmek için kullanılan windows servislerini ele almıştık. Bu makalede ise bir windows servisi oluşturmayı ve varsayılan özelliklerini değiştirmeyi ele alıyor olacağız.

Makale

İlk Windows Servis Uygulamamızı Oluşturuyoruz

Windows servis uygulaması oluşturmak için işe “Yeni Proje” ekranından, Windows Service şablonunu seçerek, boş bir windows servis uygulama şablonu oluşturarak (şekil 1.2 ve 1.2) başlıyoruz.

Şekil: 1.1

Şekil: 1.2

Windows Servis şablonu projenize aşağıdaki dosyaları ekler:

AssemblyInfo dosyası (AssemblyInfo.cs)
Bu dosya assembly ile ilgili tanımlama ve sürüm bilgisini içerir.

Servis dosyası (Service1.cs)

Bu dosya servis uygulamamızın kodlarını içerir.

Windows servis şablonu bu dosyalara ek olarak projeye System, System.Data, System.ServiceProcess ve System.Xml alan adlarına referanlar ekler.

Windows servis şablonu projenin Main prosedürüne şu kodu ekler:

static void Main()
{
System.ServiceProcess.ServiceBase[] ServicesToRun;
ServicesToRun = new System.ServiceProcess.ServiceBase[]
{ new Service1() };
System.ServiceProcess.ServiceBase.Run(ServicesToRun);
}

Windows Servisinin Varsayılan Özelliklerinin Değiştirilmesi

Yeni bir Windows servis projesi oluşturduktan sonra ServiceName ve Name gibi bazı özellikleri, kendi gereksinimleriniz doğrultusunda düzenlemeniz gerekmektedir. ServiceName özelliği ile SCM’ın, servisinizi tanımlamak için kullanacağı ismi, Name özelliği ile ise sınıfımızın ismini tanımlarız. Son olarak Main prosedüründeki servis adını da, Name özelliğine verdiğimiz değer ile aynı şekilde değiştiririz. 

static void Main()
{
System.ServiceProcess.ServiceBase[] ServicesToRun;
ServicesToRun = new System.ServiceProcess.ServiceBase[]
{ new Service1() };
System.ServiceProcess.ServiceBase.Run(ServicesToRun);
}

Servis uygulamasını özelleştirmek için şu özelliklerde de değişiklik yapabiliriz:

AutoLog: Bu özellik, servisimizin oluşan hata ve durum değişikliklerini otomatik olarak olay günlüğüne yazmasını sağlar. Eğer bu özelliği devre dışı bırakarak olay günlüğü kayıtlarını kendimiz oluşturmak istiyorsak, false değerini vermemiz gerekir.

CanStop: Bu özellik, servisimizin başladıktan sonra durdurulabilip, durdurulamayacağını belirlemekte kullanılır. Kullanıcıların servisi durdurmasını engellemek için bu özelliğin değerini false olarak belirtmemiz gerekir.

CanShutdown: Bu özellik, servisimizin bilgisayarın kapatılmasından haberdar edilmesini isteyip istemediğimizi belirtmek için kullanılır.

CanPauseAndContinue: Bu özellik, servisimizin başladıktan sonra beklemeye alınıp, devam ettirilebilip ettirilemeyeceğini belirlemekte kullanılır.
CanHandlePowerEvent: Bu özellik, servisimizin güç yönetimi olaylarına (düşük pil, stand by, v.b.) karşı özel işlemler gerçekleştirebilmesini sağlamak için kullanılır.

Bu özellikleri, design view’ı açtıktan sonra özellikler ekranndan Şekil: 1.3 değiştirebiliriz.

Şekil: 1.3 :: Servis projesinin varsayılan özelliklerini değiştirebileceğimiz, Özellikler ekranı.

Servisimiz Çalışıyor
Sıra windows servisimize çeşitli fonksiyonlar eklemeye geldi. İlk olarak servisimiz çalıştığında (OnStart) ve durduğunda (OnStop) çeşitli işlemler yapalım. Örnek servisimiz çalıştığı anda ve durduğu anda C:\ sürücüsünde yer alan ServisRapor.txt dosyasına servisi çalıştığı ve durduğu tarih ve saati yazacak.

protected override void OnStart(string[] args)

{

      FileStream fs = new FileStream(@"c:\ServisRapor.txt",

            FileMode.OpenOrCreate, FileAccess.Write);

      StreamWriter sr = new StreamWriter(fs);

      sr.WriteLine("MyService :: Servis Başladı! [" + DateTime.Today.ToLongDateString() + " " + DateTime.Now.ToLongTimeString() + "]");

      sr.Flush();

}

 protected override void OnStop()

{

      FileStream fs = new FileStream(@"c:\ServisRapor.txt",

            FileMode.OpenOrCreate, FileAccess.Write);

      StreamWriter sr = new StreamWriter(fs);

      sr.WriteLine("MyService :: Servis Durdu! [" + DateTime.Today.ToLongDateString() + " " + DateTime.Now.ToLongTimeString() + "]");

      sr.Flush();

}

Tabi servisimizin özelliklerini arttırmak için OnCustomCommand olayını da kullanabiliriz ancak bu ilerleyen bölümlerde ele alacağımız bir konu.

Bir sonraki bölümde olayları yönetmeyi ve windows servis uygulamamızdan olay günlüğüne kayıt eklemeyi ele alıyor olacağız.

Kaynaklar:
. Microsoft Developers Network (http://msdn.microsoft.com)
. Technet (http://technet.microsoft.com/)
. Developing XML Web Services and Server Components with Microsoft Visual Basic .NET and Microsoft Visual C# .NET ()