Pythontr

husonet | Tarih: 13.06.2017

c# Windows Service Oluşturma

c# programlama dili kullanarak Windows Hizmeti

Windows Hizmeti "Service" Nedir?


Windows oturumlarında devamlı çalıştırılabilir uygulamalar yazmaya olanak tanır. Bilgisayar önyüklenirken otomatik olarak başlatılabilir, herhangi bir kullanıcı etkileşimi olmaksızın duraklatılabilir ve yeniden başlatılabilir. InstallUtil.exe komut satırı yardımcı programını çalıştırıp yolun servisin yürütülebilir dosyasına aktarılmasıyla kolayca kurulabilir.


Neden Windows Hizmeti kullanmalıyım?


Bazı işletmelerin en yaygın gerekliliklerinden bir tanesi, zaman alanına dayalı, uzun süredir planlanmış işlerdir. Örneğin, her gün öğleden sonra bülten göndermek veya müşteriye her saat bir e-posta uyarısı göndermek.


Dolayısıyla, bir Windows Hizmeti oluşturmak, başkalarının kullanıcılarını aynı bilgisayara müdahale etmeden, perde arkasında gerekli işi gerçekleştirebilen bir hedefi gerçekleştirmek için güvenilir çözümlerden biri olabilir.


Yazımızda, bir zaman aralığında zamanlanmış bir işi yapmak için bir Windows Hizmetinin geliştirilmesi ve yüklenmesi adım adım açıklanmaktadır.


Visual Studio'yu açın ve menülerden "File" -> "New" -> "Project ..." seçin.


Yeni bir Proje penceresi açılacaktır. "Visual C #" >> "Windows" proje türünü seçin ve sağ taraftan "Windows Hizmeti" ni seçin ve aşağıdaki ekran görüntüsünde gösterildiği gibi projeyi "GumrukServis" olarak adlandırın.


 Create Windows Service

"OK" butonuna tıkladığınızda proje oluşturulacak ve aşağıdaki ekranda gösterildiği gibi hizmetin tasarım görünümünü göreceksiniz. Solution Explorer'da "Service1.cs" dosyasını seçip F2 tuşuna basarak ismini değiştirebilirsiniz. Biz Service1.cs dosyasını Servis.cs olarak yeniden adlandırdık.


 Windows Service

click here to switch to code view linkine tıklarsanız kod görünümüne geçebilirsiniz. Kod görünümüne geçtiğinizde üç adet method göreceksiniz. Biz onstart ve onstop methodlarını kullanacağız. onstart methodu hizmet başlatıldığında tetiklenir onstop ise hizmet durduğunda tetiklenir.


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks;
using System.Timers;

namespace GumrukServis
{
public partial class Servis : ServiceBase
{
public Servis()
{
InitializeComponent();
}

protected override void OnStart(string[] args)
{
}

protected override void OnStop()
{
}

}

GumrukServis projesini sağ tıklatın, yeni bir sınıf ekleyin ve "Islemler.cs" olarak adlandırın. Bu sınıf, projede ihtiyaç duyduğumuz yöntemleri oluşturmak için faydalı olacaktır.




using System;
using System.IO;

public class Islemler
{
public static void WriteDebugLog(String Message) {
StreamWriter sw = null;
try
{
sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "\\LogFile.txt", true);
sw.WriteLine(DateTime.Now.ToString() + ": " + Message);
sw.Flush();
sw.Close();
}
catch
{

}
}
}

Şimdi Servis.cs dosyamıza dönelim ve bir timer tanımlayalım.


namespace GumrukServis
{
public partial class Servis : ServiceBase
{
private Timer tmr = null;

Belirli bir zaman aralığında tetiklenecek methodumuzu yazalım.


        private void tmr_Tick(object sender, ElapsedEventArgs e)
{
Islemler.WriteDebugLog("Basarili bir sekilde calisti.");
}

OnStart ve OnStop methodlarımızın içini dolduralım.


        protected override void OnStart(string[] args)
{
this.tmr = new Timer();
this.tmr.Interval = 30000; // her 30 saniye
this.tmr.Elapsed += new ElapsedEventHandler(this.tmr_Tick);
this.tmr.Enabled = true;
Islemler.WriteDebugLog("Gumruk servis calismaya basladi.");
}

protected override void OnStop()
{
this.tmr.Enabled = false;
Islemler.WriteDebugLog("Gumruk servis durdu.");
}

Şimdi Servis.cs dosyamızın dizayn modunda açalım üzerine çift tıklamanız yeterli olacaktır. Dizayn modunda açtıktan sonra mouse ile sağ tıklayıp Add Installer seçeneğine tıklayalım.


 Windows Service Dizayn

Ardından, aşağıda gösterildiği gibi "ProjectInstaller.cs" adlı yeni bir dosyanın olacağını görebilirsiniz.


 ProjectInstaller.cs

"ServiceInstaller1" üzerinde sağ tıklayın ve "Properties" i tıklayın. ServisName "Gumruk Servis" ve StartType özelliğini "Manuel" olarak ayarlayın.


 serviceInstaller

serviceProcessInstaller1'i sağ tıklatın, özellikler penceresine gidin ve "Account" u "Local System" olarak değiştirin.


 serviceProcessInstaller

Projenizi build edip bulunduğu pathe gidip exenin oluşup oluşmadığını kontrol ediniz. Exe oluştuysa bu kısımdan sonraki adımlara geçebilirsiniz.


Artık Windows Hizmet makinanıza yüklenmeye hazırdır.


Başlat->Çalıştır->cmd konsol ortamına geçiş yapınız.


cd komutu kullanarak GumrukServis.exe nin bulunduğu konuma gidiniz.


Benim pathim aşağıdaki şekilde.


cd c:\GumrukServis\GumrukServis\GumrukServis\bin\Release

Şimdi projemizi InstallUtil.exe kullanarak Windows Hizmetlerine yükleme işlemini tamamlayalım.


 InstallUtil.exe

Windows Hizmetleri kontrol ettiğinizde listede uygulamamız Gumruk Servis olarak görüntülenecek üzerine çift tıklayarak başlatabilir ve gerekli ayarları yapabilirsiniz.


Windows Hizmeti Silme İşlemi


Aşağıdaki komutu konsol ortamında çalıştırmanız gerekmektedir. Konsol ortamına geçiş için Başlat->Çalıştır->cmd kısmından geçebilirsiniz.


sc delete "Gumruk Hizmeti"

Konuyla ilgili sorularınız olursa yorum bölümünden paylaşabilirsiniz.