Bir Windows Service‘ine bağımlı uygulama geliştirdiğiniz zaman, ilgili Windows Service‘in durumunu belirlemek kritik öneme sahip oluyor. Service, uygulamamızı destekleyen, kendi geliştirdiğimiz bir service olabileceği gibi, Windows ile birlikte gelen service’lerden biri de olabilir.
ServiceController Sınıfı
ServiceController sınıfı, System.ServiceProcess namespace’inde yer alır. Lokal makinadaki veya Uzak makinadaki bir windows service‘ini temsil eder, ilgili service’in sorgulanmasına ve çeşitli özelliklerinin değiştirilmesine izin verir.
ServiceController Sınıfının Kullanımı
ServiceController sınıfını projelerimizde kullanabilmek için, projemize System.ServiceProcess.dll dosyasını referans olarak eklemeliyiz.
Daha sonra, kodumuzun using kısmına System.ServiceProcess eklemeliyiz;
using System.ServiceProcess;</pre>
Lokal makinadaki bir service’in durumunu belirleme Lokal makinadaki bir service’in durumunu belirlemek için, öncelikle ServiceController sınıfından yeni bir örnek oluşturmamız lazım.
Sordulamak istediğimiz windows servis’i ile değişkenimizi ilişkilendirmek için kullanabileceğimiz üç yöntem var.
Örnek olarak Print Spooler servisini sorgulamak için;
ServiceController ServiceByServiceName = new ServiceController(); ServiceByServiceName.ServiceName = "Spooler"; ServiceController ServiceByDisplayName = new ServiceController(); ServiceByDisplayName.DisplayName = "Print Spooler"; ServiceController ServiceByConstructor = new ServiceController("Spooler");
Yukarıdaki kodda görebileceğiniz gibi ServiceController sınıfımızı tanımladıktan sonra, Status özelliğini kullanarak, servis’in durum bilgisini sorgulayabiliriz.
Status özelliği ServiceControllerStatus enum tipinde değer döndürür;
Servis’in çalıştığı durumu kontrol etmek için kodumuzu aşağıdaki gibi yazabiliriz;
ServiceController sc = new ServiceController("Spooler"); if (sc.Status == ServiceControllerStatus.Running) { MessageBox.Show("Servis çalışıyor"); }
Not: Servis durumunu sorgulayan uygulamayı çalıştıran kullanıcının yeterli yetkisi bulunmalıdır. Aksi taktirde bir hata fırlatılacaktır.
Uzak makinadaki bir service’in durumunu belirleme
Uzak makinadaki bir service’in durumunu belirleme, lokal makinadaki service’in durumunu belirlemek kadar kolaydır. Tek yapmamız gereken MachineName özelliğine uzak makinanın adresini girmek.
Uzak makinadaki Print Spooler servisini sorgulamak istediğimizde;
ServiceController sc = new ServiceController("Spooler", "UzakSunucu"); if (sc.Status == ServiceControllerStatus.Running) { MessageBox.Show("Servis çalışıyor"); }
Senior Software Engineer, @Microsoft
Ada ve Ege'nin babası ;)
Makale Adedi: 484