2011-11-16 22 views
34

Bir Windows hizmet programı oluşturdum ve hatanın kesinlikle Windows olay günlüğüne yazılmasını istiyorum. Yani kod proje makalesinden adımları takip:Bir Windows Hizmet Programında Olayları Günlüğe Kaydetme

http://www.codeproject.com/KB/dotnet/simplewindowsservice.aspx

Ama başlattığınızda ben olay görüntüleyici penceresinde oluşturulan olay günlüklerine yazdığı özel günlük mesajlarından birini görüyorsanız veya hizmeti bitmiyor . Ayrıca, iletinin bir hatadan mı kaynaklandığını veya yalnızca bilgi mi olduğunu nasıl belirleyebilirim?

cevap

57

İlk olarak, MSDN arkadaşınız. Bilmeye değer bazı potansiyel kazanç var olduğundan, bağlantıyı kontrol ettiğinizden emin olun.

this.ServiceName = "MyService"; 
this.EventLog = new System.Diagnostics.EventLog(); 
this.EventLog.Source = this.ServiceName; 
this.EventLog.Log = "Application"; 
Ayrıca yukarıdaki kaynak yoksa, bir kaynak oluşturmak için gereken

: o zaman

((ISupportInitialize)(this.EventLog)).BeginInit(); 
if (!EventLog.SourceExists(this.EventLog.Source)) 
{ 
    EventLog.CreateEventSource(this.EventLog.Source, this.EventLog.Log); 
} 
((ISupportInitialize)(this.EventLog)).EndInit(); 

ve sadece bunu kullanın:

Esasen, bir EventLog nesnesi oluşturmak

aslında oldukça basittir.

+10

Not günlüğü oluştur. Aksi takdirde bir istisna (en az Windows Server 2003'ten itibaren) –

+1

Kesinlikle alırsınız ve bu MSDN belgelerinde açıkça belirtilmiştir. – alphadogg

+8

@alphadogg bir ServiceBase'in EventLog özelliğidir. Kod yanlış. Varsayılan olarak, .NET tabanlı Windows Service, olay günlüğünü "Uygulama" olarak yazacaktır, bu nedenle el ile belirtmeniz gerekmez. –

21

Sonunda, StackOverflow'un çeşitli yanıtlarını ve MSDN'yi birleştirerek çalışmaya başladım. aşağıdaki gibi

Önce oluşturucu içinde

public UserService1() 
    { 
     //Setup Service 
     this.ServiceName = "MyService2"; 
     this.CanStop = true; 
     this.CanPauseAndContinue = true; 

     //Setup logging 
     this.AutoLog = false; 

     ((ISupportInitialize) this.EventLog).BeginInit(); 
     if (!EventLog.SourceExists(this.ServiceName)) 
     { 
      EventLog.CreateEventSource(this.ServiceName, "Application"); 
     } 
     ((ISupportInitialize) this.EventLog).EndInit(); 

     this.EventLog.Source = this.ServiceName; 
     this.EventLog.Log = "Application"; 
    } 

kullanın aşağıdaki ad alanları

using System.ComponentModel; 
using System.Diagnostics; 

Ardından kurulum günlüğü şunlardır: aslında doğru izinleri olması gerekir

protected override void OnStart(string[] args) 
    { 
     base.OnStart(args); 

     this.EventLog.WriteEntry("In OnStart"); 
    } 
İlgili konular