C#'da Windows Hizmetlerine Giriş
[[academy-video-youtube({"vid": "y64L-3HKuP0", "start_time": "0", "title": "C# ile Windows Hizmetlerine Giriş - Bir hizmet oluşturma, yükleme ve Topshelf kullanımı nasıl", "creator": "Tim Corey", "length": "31m 20s"})]]
Windows hizmetleri, kullanıcı etkileşimi olmadan arka plan görevlerini gerçekleştirme kapasitesine sahip, .NET ekosisteminde güçlü araçlardır. C#'ta bir Windows hizmeti oluşturmak karmaşık gelebilir, ancak "C# İçinde Windows Hizmetleri Tanıtımı - Topshelf kullanarak bir hizmet oluşturma, yükleme ve kullanma" adlı videosunda, Tim Corey, adım adım süreci sadeleştirir.
Bu makalede, o videoyu adım adım inceleyeceğiz ve her konuyu açıklık ve süreklilik kazandırarak ele alacağız.
Windows Hizmetlerine Giriş
Tim, Windows hizmetlerini, otomasyon için güçlü, genellikle göz ardı edilen araçlar olarak tanıtır. Bu uygulamalar, bir kullanıcı arayüzüne ihtiyaç duymadan görevleri yerine getirerek arka planda çalışmak üzere tasarlanmışlardır. Yaygın örnekler arasında SQL Server Agent veya Hyper-V servisleri bulunur.
Tim, C#'ı ustalıkla öğrenmek için pratik yapmanın önemini vurgular. Ellerle öğrenme için video açıklamasında paylaşılan kaynak kodunu indirmenizi önerir.
Bir Konsol Demo Uygulaması Oluşturma
Visual Studio kullanarak, Tim yeni bir konsol uygulama projesi oluşturur ve buna SimpleHeartbeatService adını verir. Windows Servis proje şablonunu kullanabilmenize rağmen, Tim hata ayıklama kolaylığı adına konsol yaklaşımını tercih eder.
"Buradaki fikir, buraya koyduğum kodla ilgili değil, servisi nasıl oluşturacağımla ilgili," diye belirtir Tim.
Windows Servisi Nedir?
Tim, Windows'ta Başlat menüsü aramasını kullanarak Hizmetler sekmesini açar (sadece "services" yazın ve Enter tuşuna basın). Arka planda çalışan hizmetlerin uzak masaüstü veya MySQL sunucusu gibi işletim sistemi için hayati fonksiyonları yerine getirdiğini açıklar.
Hedef, özel kod kullanarak bu listeye yeni bir giriş oluşturmaktır.
Visual Studio Proje Türleri: Konsol Uygulaması vs. Windows Servisi
Visual Studio'da Windows Servis projesini seçme eğiliminde olabilirsiniz, ancak Tim bunun hata ayıklamanın daha zor olduğunu açıklar. Bunun yerine, bir konsol uygulaması yerel olarak çalıştırmanıza ve test etmenize olanak tanır, canlı bir servise hata ayıklayıcısı ekleme gereksinimini azaltır.
"Yerleşik servis türü proje hata ayıklamayı daha zor hale getirir çünkü önce yüklemeniz, ardından hata ayıklayıcısı eklemeniz gerekir."
NuGet ile Topshelf Ekleme
Servis uygulamasını basitleştirmek için, Tim NuGet üzerinden açık kaynaklı bir çerçeve olan Topshelf'i ekler. Milyonlarca indirme ile popüler olan bu kütüphane, gereksiz kod olmadan Windows servisleri oluşturmanıza yardımcı olur.
Adımlar:
Başvurulara sağ tıklayın
NuGet Paketlerini Yönet'i seçin
- Topshelf'i arayın ve yükleyin
Servis Mantığını Yazma
Tim, iki public yöntemi olan Start() ve Stop() ile bir Heartbeat sınıfı oluşturur. Kurucu içinde, her saniyede bir çalışacak şekilde bir System.Timers.Timer kurar.
Bu zamanlayıcının Elapsed olayı, C:\temp\demos\ klasöründeki bir .txt dosyasına mevcut zamanı ekler. Bu, sürekli çalışan bir arka plan görevini taklit eder.
"Bu zamanlayıcı her saniye bir metin dosyasına yazacak, bu da servisin canlı olduğunu gösterecek."
Bu, uzun süreli işlemlerin gerçek hizmetlerde nasıl çalıştığını simüle eder, örneğin klasör tarama veya belgeleri yazdırma gibi.
Topshelf ile Servisi Bağlama
HostFactory.Run kullanarak, Tim Topshelf'i uygulamaya entegre eder:
Heartbeat sınıfını tanımlar
Start() ve Stop() yöntemlerini eşler
- Servisin gerekli izinleri vererek LocalSystem olarak çalışmasını yapılandırır
Ayrıca servis için meta veriler ayarlar:
Servis adı: HeartbeatService
Görünen adı: Heartbeat Service
- Açıklama: YouTube videosu amacıyla gösterim için kullanılır
Konsol Uygulaması Olarak Servisi Çalıştırma
Yüklemeden önce, Tim uygulamayı çalıştırarak test eder. Zamanlayıcı, heartbeat.txt'ye zaman damgalarını doğru şekilde ekler. Notepad++'ın İzleme özelliğini kullanarak, gerçek zamanlı güncellemeleri gösterir.
Servisi Yükleme ve Doğrulama
Tim, bin\Debug klasöründen .exe ve ilgili dosyaları kalıcı bir konuma (örneğin C:\demos\HeartbeatService) kopyalar. Bir yönetici komut istemi kullanarak aşağıdaki komutları çalıştırır:
SimpleHeartbeatService.exe install
SimpleHeartbeatService.exe startSimpleHeartbeatService.exe install
SimpleHeartbeatService.exe startBu, servisi Servis Kontrol Yöneticisine ekler. Hizmetler sekmesini tekrar açarak ve Yenile'ye tıklayarak, servis artık görünür ve çalışıyor.
"Bir servisi yüklemek gerçekten kolay ve bir servisle yapabileceğiniz birçok şey var."
Kaldırmak için:
SimpleHeartbeatService.exe uninstallSimpleHeartbeatService.exe uninstallÖzet: Avantajlar ve Dikkat Edilmesi Gerekenler
Tim, Topshelf kullanarak bir servis oluşturmanın ve yüklemenin basit olduğunu özetler. Ancak, dosya yazmayı sonsuz hale getirmenin depolama sorunlarına yol açabileceğini, bunun da uygun günlük yönetimi için iyi bir hatırlatma olduğunu uyarır.
Gerçek Dünya Servis Fikirleri
Tim, Windows servisleri için pratik fikirler paylaşır:
Klasör temizleme: İndirilenler'den eski dosyaları silme
Görüntü düzenleme: Fotoğrafları tarihe göre klasörlere ayırma
CSV işleme: Bir klasörü izle ve CSV'leri otomatik olarak bir veritabanına aktar
- E-posta otomasyonu: bir yardım masası tablosunu izleyin ve bildirim gönderin
Bu örnekler, SQL Server, OneDrive ve görev planlayıcıları gibi araçlarla entegre olarak arka planda görevleri otomatikleştirmek için servisleri nasıl kullanabileceğinizi gösterir.
Son Düşünceler
Tim, geliştiricileri denemeler yapmaya teşvik ederek sonuçlandırır. Sadece bellek, depolama ve olay kaydı ile dikkatli olun. Otomatik güncelleme, güvenlik ayarları veya daha sağlam dağıtım gerekiyorsa, ek yapılandırma gerekecektir.
"Burada çok fazla güç var, ve yapabileceğiniz çok şey var."
Sonuç
Tim Corey'nin videosundaki adım adım gösterimi kullanarak, C#'ta Windows servisi oluşturmak erişilebilir ve pratik hale gelir. Topshelf'i kullanarak, bir konsol uygulaması asgari kurulumla tam işlevli bir Windows servisi haline getirilebilir. Günlük dosyalarını yönetmek, veritabanı olaylarını ele almak veya otomasyon gerçekleştirmek olsun, servisler gerçek zamanlı, arka plan .NET Framework veya .NET Core uygulamaları oluşturmak için güçlü ve ölçeklenebilir bir yol sunar.
Bu eğitimi, servisleri verimli bir şekilde anlamak, oluşturmak ve yüklemek için tam bir yol haritası olarak kullanın. Tam kapsamlı test etmeyi unutmayın ve her zaman yükleyici veya komut istemini yönetici olarak çalıştırın.



