Jump to content

Windows Servislerinin Görüntülenip Yönetilm


wmismail

Recommended Posts

Windows Servislerinin Görüntülenip Yönetilmesi

Merhabalar, Bu makalemizin konusu Windowsdaki servislerin bulunup, bir liste şeklinde gösterilmesi ve istediğiniz servisi, durdurup, yeniden başlatıp, restart edebileceğiniz bir program... Amaç Windows Servislerini ve yapabileceğiniz işlemleri biraz daha tanımak.

İlk önce Windows servisleri nedir bunu inceleyelim. Servisler, Windows 2000 ve daha sonra gelen işletim sistemlerinde (Windows XP ve Windows 2003) mevcuttur. Servisler arkada çalışan, bilgisayarınız açıldığı anda (bir kullanıcının bilgisayara login olması gerekmeden) çalışan ve siz Windows u kapatana kadar arkada çalışabilecek programlardır. Örneğin hepimizin bildiği IIS, bir servistir. Siz bilgisayarınızı açtığınızda çalışmaya başlar ve sizin makinenize HTTP ile bağlanan kullanıcılara siz bir işlem yapmadan cevap verir.

Servislerin durdurulma, başlatılma, durdurup başlatılma, duraklatılma (Pause) gibi özel işlemleri vardır. İşte bizim programımızda bunları yapacak. Programımız servisleri bir listede (ListView) gösterecek ve bu listeden servisinizi seçip, durdurup başlatmak gibi yukarıda saydığım işlemleri yapmanızı sağlayacak.

Ama önce Windowsun servislerinin nereden görebileceğinize bakalım. Bilgisayarınıza kurulu servisleri görmek için Desktop daki My Computer (Bilgisayarım) a sağ tuş tıklayarak Manage (Yönet) a basın. Daha sonra açılacak pencerede sol taraftan Services (Hizmetler) bölümüne tıklayın. Sağ bölmede şu anda Windowsda olan servisler görüntülenir. Benim makinemde aşağıdaki şekilde.

1.gif

Başlamadan önce bilmemiz gereken son şey ise her servise duraklat (pause) işlemini yapamayacağımızdır ve her servisin direk başlayamadığı bazı servislerin başlaması için bir parametreye ihtiyaç duyduğudur.

İlk önce bu servisleri listeleyecek programımızı yazalım. Yeni bir Windows Application açın ve adına WinSerMan yazın. Açılan formunuzun üstüne şimdilik sadece bir ListView yerleştirin, en yukarıyada Servis işlemlerini daha hızlı yapabilmemiz için System.ServiceProcess namespacesini import edin ve aşağıdaki kodları formun Load olayına yazın.

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

ListView1.View = View.Details

ListView1.FullRowSelect = True

ListView1.CheckBoxes = False

ListView1.GridLines = True

ListView1.Columns.Add("Servis Adi", -2, HorizontalAlignment.Left)

ListView1.Columns.Add("Açıklama Yazisi", -2, HorizontalAlignment.Left)

ListView1.Columns.Add("Durumu", -2, HorizontalAlignment.Left)

Dim servis As ServiceProcess.ServiceController = New ServiceProcess.ServiceController

For Each servis In ServiceProcess.ServiceController.GetServices

Dim item As New ListViewItem(servis.ServiceName)

item.SubItems.Add(servis.DisplayName)

If servis.Status = ServiceProcess.ServiceControllerStatus.Running Then

item.SubItems.Add("Calisiyor")

ElseIf servis.Status = ServiceProcess.ServiceControllerStatus.Stopped Then

item.SubItems.Add("Durmus")

ElseIf servis.Status = ServiceProcess.ServiceControllerStatus.Paused Then

item.SubItems.Add("Durdurulmus")

End If

ListView1.Items.Add(item)

Next

ListView1.SmallImageList = New ImageList

ListView1.LargeImageList = New ImageList

End Sub

Burada yaptığımız işlemleri adım adım inceleyelim. İlk bölümler ListView ile alakalı olduğundan çok fazla değinmeyeceğim ama temel olarak yaptığımız şey ListView kontrolüne 3 tane kolon eklemek ve bu 3 kolonda servisimizin detaylarını listelemek. Sonraki adımda servis isimli bir değişken yaratıyorum, bu değişkenin ServiceController dan türetildiğine dikkat edin. Böylece aslında ben temel olarak bir servis oluşturuyorum. For Each ile bu servis değişkenime ServiceController classının GetServices metodu ile bütün servisleri tek tek alıp servis değişkenime atıyorum. Daha sonraki For Each in içindeki bölümlerde ise o anda servis değişkenime atadığım servisin bilgilerini ListView e ekliyorum. İlk eklediğim bilgi Servisin ismi (ServiceName), ikinci eklediğim bilgi ise servisin görüntülenen ismi (DisplayName), servis isminden daha fazla açıklamaya sahip olan ismi, son bölüm ise o andaki durumu (Status). Bir servis normal bir zamanda ya çalışıyor (Runing) durumda olur, ya durdurulmuş durumda (Stoped) olur yada duraklatılmış durumda (Paused) olur. Bunun dışında servislerin durudurulmayı bekleyen (PausePending), çalıştırılmayı bekleyen (StartPending) gibi başka durumlarıda vardır. İsterseniz kodunuza bu durumlarıda ekleyebilirsiniz. Kodun en son bölümünde ise ListView de nesnelerimin görüntülenmesi için iki tane boş ImageList yarattım, eğer bu iki ImageList i eklemezseniz ListView de servislerinizin bilgileri görüntülenmez.

2.gif

Servislerimizi gördük şimdi bu servislerimize biz bazı işlemler yaptıracağız. Bunun için formunuza ListView in altına 5 tane buton ekleyin. Butonları aşağıdaki görüntüdeki gibi isimlendirin ki sonradan bir karışıklık çıkmasın.

3.gif

Adım adım yapacağımız işlemleri inceleyelim... ilk olarak ben bir enum oluşturdumki yapılacak işlemleri belirleyebileyim diye, daha sonra kullanıcı ListView den bir servis seçtikten sonra, seçili sevrisi bulduruyorum ve kullanıcının bastığı butona göre seçtiği servise bir işlem yaptırıyorum. Yukarıdaki kodunuza aşağıdaki kodları ekleyin.

Public Enum Gorev

durdur = 0

duraklat = 1

baslat = 2

End Enum

Public Sub IsYap(ByVal serviceName As String, ByVal neyap As Gorev, Optional ByVal BaslangicParametre As String = "")

Dim servis As ServiceProcess.ServiceController = New ServiceProcess.ServiceController

Try

For Each servis In ServiceProcess.ServiceController.GetServices

If serviceName = servis.ServiceName Then

If neyap = Gorev.baslat Then

If BaslangicParametre = "" Then

servis.Start()

Else

servis.Start(New String() {BaslangicParametre})

End If

ElseIf neyap = Gorev.duraklat Then

servis.Pause()

ElseIf neyap = Gorev.durdur Then

servis.Stop()

End If

Exit For

End If

Next

Catch ex As Exception

MsgBox("Hata oluştu, Hata Mesajı = " & ex.Message)

End Try

System.Threading.Thread.Sleep(3000)

Call Yenile()

End Sub

Public Function ServisAdiBul() As String

Dim secili As ListView.SelectedListViewItemCollection = Me.ListView1.SelectedItems

Dim servisAdi As String

For Each item As ListViewItem In secili

servisAdi = (item.SubItems(0).Text)

Next

Return servisAdi

End Function

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

IsYap(ServisAdiBul, Gorev.durdur)

End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

Dim parametre As String

parametre = InputBox("Baslangic Parametresi girmek istiyormusunuz", "parametre?")

IsYap(ServisAdiBul, Gorev.baslat, parametre)

End Sub

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

Dim sonuc As DialogResult = MessageBox.Show("Her servis duraklatilamaz" & vbNewLine & "Yinede denemek istiyormsunuz ?", "Durdurma", MessageBoxButtons.YesNo, MessageBoxIcon.Information)

If sonuc = DialogResult.Yes Then

IsYap(ServisAdiBul, Gorev.duraklat)

End If

End Sub

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click

Button1_Click(sender, e)

Button2_Click(sender, e)

End Sub

Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click

Call Yenile()

End Sub

Private Sub Yenile()

ListView1.Clear()

Form1_Load(Nothing, Nothing)

End Sub

End Class

İlk bölüm enum, burada yapacağım işlemleri birbir tanımladım, ileride bu işlemleri kullanacağım.

İkincisi ise IsYap metodum, bu metod servislerin durdurulması, başlatılması gibi işlemleri yapıyor. Üç tane parametre alıyor ilk parametre servisin ismi, böylece hangi servise işlem yapmam gerektiğini buluyorum, servisin ismini bulan metod ise hemen aşağıda. İkinci parametre ise görevi anlatıyor az önce tanımladığım enum türünden, son parametre ise optional bir parametre burada servis başlatılırken servisin başlatılması ile ilgili bir parametre soruyor kullanıyca bu parametrenin servise aktarılmasına yarıyor. Diğer kodlar ise aslında ilk yazdığımız kodlara çok benziyor. Servis değişkenimi oluştuyorum ve For Each döngüsü ile Windows daki bütün servisleri benim servisimi bulana kadar tek tek inceliyorum. Eğer kullanıcının seçtiği servis ile For Each ın o anda getirdiği servisin ismi aynı ise bu servise kullanıcının veridiği göreve göre bir işlem yaptırıyorum. Eğer başlat görevini vermişse servisin Start metodunu kullanıyorum, bu metot bir parametre alabiliyor, kullanıcı eğer servisi başatırken bir parametre vermişse bu parametreyi aktatıyorum. Diğer bölümler ise servisin duraklatılması ve durdurulması ile alakalı. Eğer benim aradığım servisi bulmuşsa For Each döngüsünden Exit For ile çıkıyorum ki diğer servisleride tek tek incelemesin ve boşuna programı yavaşlatmasın.

Try Catch bloğunun hemen altında bir Thread bloğu var, bu blok programın belli bir süre beklemesini sağlıyor, ben yarın saniye kadar programı bekletiyorum, böylece servisin sizin verdiğiniz komutu yapmasını sağlıyorum. Son olarakta verdiğiniz komuta göre servisleri tekrar listeletmek için Yenile metodunu çağarıyorum.

Bu bölümden sonraki metot ise bir fonksiyon, kullanıcının hangi servisi seçtiğini buluyor. ListView ile alakalı olduğundan dolayı ben bu bölüme değinmeyeceğim.

Diğer bölümler ise kullanıcının iş yapmak için kullandığı butonlar ilk buton Durdur butonuydu IsYap metodumu çağarıyorum ve parametrelerine servisin adı ve görevi beliriyorum. İkinci buton ise Başlat butonuydu kullanıcının bir parametre verip vermeyeceğini öğreniyorum ve ona göre IsYap fonksiyonumu çağarıyorum. Üçüncü buton ise Duraklat butonum, ilk önce kullanıcıya her Servisin duraklatılamayacağı ile ilgili bir uyarı verip, hala duraklatmayı isterse IsYap fonksiyonumu çağarıyorum. Dördüncü buton Durdur Başlat butonum burada sırasıyla ilk önce durdurma işlemini yapacak olan Buton1_Click metodunu çağarıyorum, daha sonra ise başlatma işlemini yapacak olan Button2_Click işlemini çağarıyorum.

Son buton ise yavaş bilgisayarlarda işlemi yaptıktan sonra hemen görüntülenmiyorsa Yenile metodunu çağaracak olan Yenile butonu.

En son fonksiyon ise Yenile fonksiyonu, bu fonksiyonda ilk önce ListView i temizliyorum daha sonra tekrar dolduruyorum.

4.gif

5.gif

Bu makalemizde Windows Servislerinin ne olduğunu, nasıl listeleneceğini ve nasıl bu servislere işlem yapacağınız inceledik. Eğer "şu kodlar bi yerde olsada yazmam şimdi" diye düşünüyorsanız kodları buradan indirebilirsiniz :dribble:

Bu makale ile ilgili herhangi bir sorunuzda bana mail yollayabilirsiniz.

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...