Windows Hizmet Uygulamalarına Giriş

Not

Bu makale .NET'te barındırılan hizmetler için geçerli değildir. ve Çalışan Hizmeti şablonunu kullanan Microsoft.Extensions.Hosting.BackgroundService Windows hizmetleriyle ilgili en son içerik için bkz:

Eski adı NT hizmetleri olan Microsoft Windows hizmetleri, kendi Windows oturumlarında çalışan uzun süre çalışan yürütülebilir uygulamalar oluşturmanıza olanak tanır. Bu hizmetler bilgisayar ön başlatıldığında otomatik olarak başlatılabilir, duraklatılabilir ve yeniden başlatılabilir ve herhangi bir kullanıcı arabirimi göstermez. Bu özellikler, hizmetleri bir sunucuda veya aynı bilgisayarda çalışan diğer kullanıcılarla karışmayan uzun süre çalışan işlevlere ihtiyaç duyduğunuzda kullanmak için ideal hale getirir. Hizmetleri, oturum açmış kullanıcıdan veya varsayılan bilgisayar hesabından farklı olan belirli bir kullanıcı hesabının güvenlik bağlamında da çalıştırabilirsiniz. Hizmetler ve Windows oturumları hakkında daha fazla bilgi için Windows SDK belgelerine bakın.

Hizmet olarak yüklenen bir uygulama oluşturarak kolayca hizmet oluşturabilirsiniz. Örneğin, performans sayacı verilerini izlemek ve eşik değerlerine tepki vermek istediğinizi varsayalım. Performans sayacı verilerini dinleyen, uygulamayı dağıtan ve veri toplamaya ve çözümlemeye başlayan bir Windows Hizmeti uygulaması yazabilirsiniz.

Hizmetinizi bir Microsoft Visual Studio projesi olarak oluşturur, içinde hizmete hangi komutların gönderilebileceğini ve bu komutlar alındığında hangi eylemlerin gerçekleştirilebileceğini denetleyen kod tanımlarsınız. Hizmete gönderilebilen komutlar arasında hizmetin başlatılması, duraklatılması, devam ettirilmesi ve durdurulması yer alır; Özel komutları da yürütebilirsiniz.

Uygulamayı oluşturup derledikten sonra, InstallUtil.exe komut satırı yardımcı programını çalıştırarak ve hizmetin yürütülebilir dosyasına yolu geçirerek yükleyebilirsiniz. Ardından Hizmetleri Denetim Yöneticisi'ni kullanarak hizmetinizi başlatabilir, durdurabilir, duraklatabilir, sürdürebilir ve yapılandırabilirsiniz. Bu görevlerin çoğunu Sunucu Gezgini'ndeki Hizmetler düğümünde veya sınıfını ServiceController kullanarak da gerçekleştirebilirsiniz.

Hizmet Uygulamaları ve Diğer Visual Studio Uygulamaları karşılaştırması

Hizmet uygulamaları, diğer birçok proje türünden farklı şekilde çalışır:

  • Bir hizmet uygulaması projesinin oluşturduğu derlenmiş yürütülebilir dosya, projenin anlamlı bir şekilde çalışabilmesi için önce sunucuya yüklenmelidir. F5 veya F11'e basarak hizmet uygulamasında hata ayıklayamaz veya çalıştıramazsınız; bir hizmeti hemen çalıştıramaz veya koduna adım atamazsınız. Bunun yerine, hizmetinizi yükleyip başlatmanız ve ardından hizmetin işlemine bir hata ayıklayıcısı eklemeniz gerekir. Daha fazla bilgi için bkz . Nasıl yapılır: Windows Hizmet Uygulamalarında Hata Ayıklama.

  • Bazı proje türlerinden farklı olarak, hizmet uygulamaları için yükleme bileşenleri oluşturmanız gerekir. Yükleme bileşenleri hizmeti yükleyip sunucuya kaydeder ve Windows Hizmetleri Denetim Yöneticisi ile hizmetiniz için bir giriş oluşturur. Daha fazla bilgi için bkz . Nasıl yapılır: Hizmet Uygulamanıza Yükleyici Ekleme.

  • Hizmet uygulamanızın Main yöntemi, projenizin içerdiği hizmetler için Çalıştır komutunu vermelidir. yöntemi, Run hizmetleri uygun sunucudaki Services Control Manager'a yükler. Windows Hizmetleri proje şablonunu kullanırsanız, bu yöntem sizin için otomatik olarak yazılır. Hizmet yüklemenin, hizmeti başlatmakla aynı şey olmadığını unutmayın. Daha fazla bilgi için aşağıdaki "Hizmet Ömrü" bölümüne bakın.

  • Windows Hizmeti uygulamaları, oturum açan kullanıcının etkileşimli istasyonundan farklı bir pencere istasyonunda çalışır. Pencere istasyonu, Pano, genel atom kümesi ve bir grup masaüstü nesnesi içeren güvenli bir nesnedir. Windows hizmetinin istasyonu etkileşimli bir istasyon olmadığından, bir Windows hizmet uygulamasının içinden yükseltilmiş iletişim kutuları görünmez ve programınızın yanıt vermemeye devam etmesine neden olabilir. Benzer şekilde, hata iletilerinin kullanıcı arabiriminde tetiklenmek yerine Windows olay günlüğüne kaydedilmesi gerekir.

    .NET Framework tarafından desteklenen Windows hizmet sınıfları, etkileşimli istasyonlarla, yani oturum açmış kullanıcıyla etkileşimi desteklemez. .NET Framework ayrıca istasyonları ve masaüstlerini temsil eden sınıflar içermez. Windows hizmetinizin diğer istasyonlarla etkileşim kurması gerekiyorsa yönetilmeyen Windows API'sine erişmeniz gerekir. Daha fazla bilgi için Windows SDK belgelerine bakın.

    Windows hizmetinin kullanıcı veya diğer istasyonlarla etkileşimi, oturum açmış kullanıcı olmaması veya beklenmeyen bir masaüstü nesneleri kümesine sahip kullanıcı gibi senaryoları içerecek şekilde dikkatle tasarlanmalıdır. Bazı durumlarda, kullanıcının denetimi altında çalışan bir Windows uygulaması yazmak daha uygun olabilir.

  • Windows hizmeti uygulamaları kendi güvenlik bağlamlarında çalışır ve kullanıcı yüklendikleri Windows bilgisayarında oturum açmadan önce başlatılır. Hizmeti içinde çalıştıracak kullanıcı hesabını dikkatle planlamanız gerekir; sistem hesabı altında çalışan bir hizmetin kullanıcı hesabından daha fazla izni ve ayrıcalığı vardır.

Hizmet Ömrü

Bir hizmet, kullanım ömrü boyunca birçok iç durumdan geçer. İlk olarak, hizmet üzerinde çalıştırılacağı sisteme yüklenir. Bu işlem, hizmet projesinin yükleyicilerini yürütür ve hizmeti söz konusu bilgisayarın Services Denetim Yöneticisi'ne yükler. Services Control Manager, Windows tarafından hizmetleri yönetmek için sağlanan merkezi yardımcı programdır.

Hizmet yüklendikten sonra başlatılması gerekir. Hizmetin başlatılması, çalışmaya başlamasını sağlar. Hizmet Denetim Yöneticisi'nden, Sunucu Gezgini'nden veya yöntemini çağırarak Start koddan bir hizmet başlatabilirsiniz. Start yöntemi, işlemeyi uygulamanın OnStart yöntemine geçirir ve burada tanımladığınız tüm kodları işler.

Çalışan bir hizmet durdurulana veya duraklatılana kadar ya da bilgisayar kapatılana kadar bu durumda süresiz olarak bulunabilir. Bir hizmet üç temel durumdan birinde bulunabilir: Running, Pausedveya Stopped. Hizmet, bekleyen bir komutun durumunu da bildirebilir: ContinuePending, PausePending, StartPendingveya StopPending. Bu durumlar, çalışan bir hizmeti duraklatma komutu gibi bir komutun verildiğini ancak henüz gerçekleştirilmediğini gösterir. Bir hizmetin hangi durumda olduğunu belirlemek için öğesini sorgulayabilir Status veya bu durumlardan herhangi biri gerçekleştiğinde eylemi gerçekleştirmek için öğesini kullanabilirsiniz WaitForStatus .

Hizmetleri Denetim Yöneticisi'nden, Sunucu Gezgini'nden veya kodda yöntemleri çağırarak hizmeti duraklatabilir, durdurabilir veya sürdürebilirsiniz. Bu eylemlerin her biri, hizmette (OnStop, OnPauseveya OnContinue) ilişkili bir yordam çağırabilir ve hizmet durumu değiştiğinde gerçekleştirilecek ek işlemeleri tanımlayabilirsiniz.

Hizmet Türleri

Visual Studio'da .NET Framework kullanarak oluşturabileceğiniz iki hizmet türü vardır. Bir işlemdeki tek hizmet olan hizmetlere türü Win32OwnProcessatanır. Bir işlemi başka bir hizmetle paylaşan hizmetlere türü Win32ShareProcessatanır. Özelliğini sorgulayarak ServiceType hizmet türünü alabilirsiniz.

Visual Studio'da oluşturulmamış mevcut hizmetleri sorgularsanız zaman zaman diğer hizmet türlerini görebilirsiniz. Bunlar hakkında daha fazla bilgi için bkz ServiceType. .

Hizmetler ve ServiceController Bileşeni

Bileşen ServiceController , yüklü bir hizmete bağlanmak ve durumunu işlemek için kullanılır; bir ServiceController bileşeni kullanarak bir hizmeti başlatıp durdurabilir, duraklatabilir ve çalışmaya devam edebilir ve bir hizmete özel komutlar gönderebilirsiniz. Ancak, bir ServiceController hizmet uygulaması oluştururken bir bileşen kullanmanız gerekmez. Aslında, çoğu durumda bileşeniniz hizmetinizi ServiceController tanımlayan Windows hizmet uygulamasından ayrı bir uygulamada bulunmalıdır.

Daha fazla bilgi için bkz. ServiceController.

Gereksinimler

  • Hizmetler, bir Windows Hizmeti uygulama projesinde veya bir .exe dosyası oluşturan ve sınıfından devralan başka bir .NET Framework özellikli projede ServiceBase oluşturulmalıdır.

  • Windows hizmetlerini içeren projelerin, proje ve hizmetleri için yükleme bileşenleri olmalıdır. Bu işlem Özellikler penceresinden kolayca gerçekleştirilebilir. Daha fazla bilgi için bkz . Nasıl yapılır: Hizmet Uygulamanıza Yükleyici Ekleme.

Ayrıca bkz.