2011-03-01 17 views
18

Otomatik olarak başlayacak şekilde ayarlanmış bir windows hizmeti oluşturdum. Bu hizmet, başlangıçta veritabanı hizmetine bağlanır. Sorun, servisimden sonra veritabanı hizmetinin başlamış gibi görünüyor. Bu bağımlılığı tanımlamak için programlı bir yol var mı, böylece hizmetim veritabanı hizmetinin başlatılmasından sonra başlıyor.Windows hizmetleri arasında bağımlılık yaratma başlangıcı

Bunu yapmak için bir kayıt defteri girdisi eklemeyle ilgili http://www.boyce.us/windows/servertipcontent.asp?ID=7 numaralı makaleyi okudum. Bunu yapmak için C# yolu olup olmadığını bilmek isterim.

Güncelleme:

yukarıdaki soruya ekleme. İşte başka bir senaryo. Hizmetler, projectinsaller gerektirmeyen installshied kullanılarak kurulmaktadır. Installshield ServiceBase sınıfından türeyen sınıfları arar ve her hizmeti yükler gibi görünüyor. Böyle bir senaryoda bağımlılık nasıl eklenir?

cevap

26

Projenizin ServiceInstaller bileşeni için ServiceInstaller.ServicesDependedOn Property'u arıyorsunuz.

makalenin Açıklamalar bölümünden

(ve ilgilendiğiniz bölümünü kalın): Bir hizmeti başlamadan önce çalıştırıyor olması diğer hizmetler gerektirebilir

. Bu özelliğin bilgileri kayıt defterinde bir anahtar için yazılmış olduğunu. (Durumda otomatik başlatma veya sistemi) kullanıcıyı hizmetini çalıştırmak çalıştığında, Hizmet Denetim Yöneticisi (SCM) dizideki hizmetlerin her biri daha önce olmuştur başladığını doğrular.

Dizideki herhangi bir hizmet çalışıyorsa, SCM bunları başlatmaya çalışır. Bu, El ile StartType hizmetlerini içerir.

Bu hizmetin üzerinde bağımlı olduğu herhangi bir hizmetin başarısız olması durumunda, bu hizmet başlatılamayacaktır. Sistem, başlatılamıyorsa, bir istisna atılmaz, çünkü bunu algılamak için sistem düzeyinde istisna işleme yoktur. hizmetinin başlatılmasını nasıl başlatacağınıza karar verin ve bunu kodunuzda uygulayın. Genel olarak, bir hizmetin başlatılması için hizmetin başarısız olması durumunda kullanıcı bir iletişim kutusu görünür.

Hizmet başlatılmazsa, Uygulama olay günlüğüne bir girişi yazılır.

Bu hizmetin numaralı telefonun hangi servisler için geçerli olduğu hizmetlerinin aynı çalıştırılabilir olması gerekmez. Jay Riggs'in cevap ilaveten

+0

+1 - Ne diyecektim;) – Oded

+0

Siz misiniz? düzenlenen soruyu yanıtla. Teşekkürler. – stackoverflowuser

+0

@stack: InstallShield'ı kullandığımdan beri bir süre geçtiğini söylediğim için özür dilerim (ve Windows Hizmetlerinde değilken), korkarım ki çok fazla yardım edemem. Google’a girişimde bulundum ve [bu] ile geldim (http://community.installshield.com/showthread.php?t=162302&page=4). –

2

, burada ve sen serviceInstaller eklemeniz gereken şeyleri içeren örnek olay günlüğüne ders Kapalı

Me.ServiceInstaller1.ServiceName = "Service1"; 
Me.ServiceInstaller1.ServicesDependedOn = new string[] {"EventLog"}; 

üzerinde servis bağımlı hale getirmek için, başka bir servis bağımlılığı varsa, 'Eventlog' 'u başka bir şeye dönüştürün ..