C# Bir Windows Service’in Durumunu Belirlemek
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");
}
İlgili diğer başlıklar:
- C# FolderBrowserDialog seçili dizini değiştirmek
- Windows API Code Pack for Microsoft .NET Framework
- Windows 8 Uygulamalarında MessageBox yerine MessageDialog Sınıfının Kullanımı
- Windows 8 Metro Style Uygulamalarda ProgressRing Kullanımı
- C# Windows’un Boş Zamanını (Idle Time) Bulmak
- C# ile Windows Sistem Saatini Ayarlamak
- WPF ve Windows 8 Uygulamalarında Arkaplan Rengi
- C# ile Form’a gölge efekti verelim ve titreme sorununu düzeltelim
- Windows 8 Programlama
- Windows 8 Programlama Ortamını Hazırlayalım
merhaba, ben office dosyaları ya da metin dosyaları üzerinde kullanıcı etkileşim halindeyken analiz yapan ve içeriğe göre dosyaya kullanıcı şifresi koyup, şifrenin girilmesi durumunda dosyayı açan aksi takdirde açılmasına izin vermeyen bir program hazırlamak istiyorum.
yukarıdaki linklere baktım ama nerden başlamam gerektiği konusunda bir fikir edinemedim.
yardımcı olur musunuz?