2011-03-15 15 views
8

Test sırasında hataları kontrol etmek için uzak bilgisayardaki Olay Günlüğünü okumak istiyorum. Bununla alakalı kod:.NET ile Uzaktan Olay Günlüğünü Okuyun

public bool CheckEventLogs(DateTime start) 
{ 
    EventLog myEventLog = new EventLog("CustomLog", "ServerName"); 
    bool errorFound = false; 
    foreach (EventLogEntry entry in myEventLog.Entries) 
    { 
    if (entry.EntryType == EventLogEntryType.Error && entry.TimeGenerated >= start) 
    { 
     Console.WriteLine("Error in Event Log:\n" + entry.Message + "\n"); 
     errorFound = true; 
    } 
    } 
    return errorFound; 
} 

Şu anda, bu kodu (yetkisiz bir işlemi gerçekleştirmek için teşebbüs) bir istisna atar. MSDN'a göre, EventLogPermission'a ihtiyacım var, ancak bu izni nasıl kullanacağına dair herhangi bir örnek bulmaya çalışıyorum. Bunu yapmanın bir örneği var mı?

Düzenleme: Yorumlar

yanıt yorumlar için hepinize teşekkür ederim - burada istenen ek bilgiler şunlardır:

istisna foreach deyimi atılır. Spesifik olarak, in işaretlendiğinde, adım adım atılan koddan geçerken. Olay günlüğü nesnesini oluşturabildiğim görünüyor, ancak olay günlüğündeki girdilere erişemiyorum.

Hesabımda hedef sistemdeki olay günlüğünü okuma iznim yok, ancak bir hesabın kimlik bilgileri var. Etkinlik görüntüleyici aracılığıyla manuel olarak bağlanırken, başka bir kullanıcı olarak bağlanmak için bir seçenek vardır. Bunu el ile yaptıktan sonra kodum sorunsuz çalıştı. Ancak, bu program her çalıştığında manuel olarak yapmaya dayanamıyorum. İhtiyacım olan şey, başka bir kullanıcı olarak programatik olarak bağlanmanın bir yoludur. EventLogPermission'un bunu yapmanın yolu olacağını düşündüm, ama belki başka bir yol var. C# 'da farklı bir kullanıcı olarak uzak bir günlüğe nasıl bağlanacağını bilen varsa, tam da aradığım şey bu olurdu.

+1

Özel durum hangi satırı atar? MSDN makalesi sadece yazma iznine ihtiyacınız olduğunu söylüyor - okuma hakkında bir şey söylemiyor. – Gabe

+1

Kullanıcı hesabınızda uzak makinedeki olay günlüğünü okuma izni var mı? Olay Görüntüleyicisi'ni açın ve kontrol etmek için uzaktaki bilgisayara makinenizden bağlanmayı deneyin. –

+0

Sadece kodunuzu deneyin ve uzak sunucudan günlükleri aldım. Her şey iyi çalışıyor. – Polaris

cevap

2

Bu soru hakkında yorum yapan herkese teşekkürler. İzinlerin .NET'in bir parçası değil, Windows'un bir parçası ve Olay Görüntüleyicisi'nin kendisinin bir parçası olabileceğini fark ettiğimde, kendi araştırmalarım için yeni bir yönüm vardı.

Yerel bilgisayarım ve uzak bilgisayar arasındaki bağlantıyı kurmak için gerekli olan "net use" komutuna benziyor. Soruyu gönderdim kod kullanmadan önce "net use" çağırırken, işler güzel çalıştı. Olay günlüğünden okumadan önce koddan bunu çağıracak kadar basit.

Yardımlarınız için tekrar teşekkürler!

+0

Sizin için çalışan kodu gönderir misiniz? – Praneeth

+0

Yerel bilgisayarım ile uzak bilgisayar arasındaki bağlantıyı kurmak için "net use" komutunu çalıştırdıktan sonra sorduğum asıl kodun çalıştığını düşünüyorum. – Brian

+0

Bize 'net use' özelliğini kodunuzdan nasıl kullandığını gösterir misiniz? Bunu bulmakta zorlanıyorum. – snippetkid

6

WMI günlükleri sorgulamak için izin verir misin

SELECT Logfile,TimeGenerated,Type,SourceName,Message FROM Win32_NTLogEvent 

gibi snippet'itir bunun için son derece yararlıdır. MS'den This utility, WMI'yi keşfetmenize izin verecek ve hatta sorguları çağırmak için .net kodunu oluşturacaktır.

Bunun bir başka yararı da, tüm olayları alabilmesi ve onları boş zamanlarınızda ayrıştırabileceğiniz uygulamalara yerelleştirmesidir. Olayları şu an yaptığınız şekilde yinelemek, işlem yapılırken bağlantının kesilmesi durumunda başarısızlığa eğilimlidir (bu, genellikle veritabanı erişimi ile kullanılan yöntemle aynıdır).

İlgili konular