Status | Engin Polat\'ın Windows 8 , Windows Phone 8 ve C# içerikli programcılık sitesi

Arşiv

Etiketlenen yazılar status

SQL Agent Çalışma Durumu

21 September 2010 Yorum yapılmamış

SQL Server servislerinden SQL Agent servisinin çalışıp çalışmadığını anlamamız gerektiği durumlarda msdb veritabanında tanımlı sp_help_job stored procedure‘ünü kullanabiliriz;

EXEC msdb..sp_help_job

Sorgu sonucunda dönen sonuç kümesinden, name alanında servisin ismi yer alırken, current_execution_status alanında servisin çalışma durumu yer alır.

Servisin çalışma durumunu gösteren birden fazla değer olabilir;

  • 1 : (Executing) Çalışıyor
  • 2 : (Waiting for thread) Çalışmaya devam ediyor
  • 3 : (Between retries) Tekrar deneniyor
  • 4 : (Idle) Boşta
  • 5 : (Suspended) Durdurulmuş
  • 7 : (Performing completion actions) Tamamlama görevi sürdürülüyor

C# Bir Windows Service’in Durumunu Belirlemek

02 September 2010 1 yorum

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;

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.

  • ServiceName özelliği
  • DisplayName özelliği
  • ServiceController constructor‘ı

Ö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;

  • ContinuePending: Servis durdurulmuş ve başlatılıyor
  • Paused: Servis durdurulmuş
  • PausePending: Servis durduruluyor
  • Running: Servis çalışıyor
  • StartPending: Servis başlatılıyor
  • Stopped: Servis çalışmıyor
  • StopPending: Servis durduruluyor

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");
}