2013-07-29 24 views
8

Ja próbuje uzyskać dostęp do zdarzenia A „” ForwardedEvents zalogować się na serwerze za pomocądodać dziennika zdarzeń do rejestru

el = new EventLog("ForwardedEvents", serverName); 

to nie działa.

Uważam, że nie działa, ponieważ dziennik nie jest zawarty w rejestrze, w którym dziennik zdarzeń mógłby go znaleźć (HKLM/System/CurrentControlSet/Services/Eventlog/..).

W jaki sposób dodać dziennik do rejestru, aby został znaleziony, lub czy istnieje inna metoda uzyskiwania dostępu do dziennika, który nie został określony w tej lokalizacji?

Odpowiedz

9

Rozwiązano problem, tworząc nowy wpis rejestru dla dziennika: (HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ eventlog \ LOGNAME).

Czy to przez .. (na serwerze Windows 2008 R2) ..

1) Kliknij prawym przyciskiem myszy na folderze nadrzędnym (dzienniku zdarzeń) -> Nowy -> Klucz

2) Imię klawisz lubią evtx plik znaleźć na (C: \ Windows \ System32 \ winevt \ Logs \ LOGNAME)

3) W prawym panelu okna Explorer rejestru, kliknij prawym przyciskiem -> nowy -> Wartość ciągu rozwijalnego

4) nazwę nowo utworzony REG_EXPAND_SZ "Plik"

5) Kliknij prawym przyciskiem myszy na nazwę "Plik"

6) modyfikować

7) W oknie "Dane wartości", należy dodać ścieżkę do evtx plik jak

(% SystemRoot% \ System32 \ winevt \ Logs \ ForwardedEvents.evtx)

+1

Ta odpowiedź pomogła mi, dzięki! Wydaje się działać bez dodawania rozwijanej wartości ciągu lub edycji wartości pliku. Dodałem [tę odpowiedź] (http://stackoverflow.com/questions/19803351/how-do-i-read-from-an-arbitrary-evxt-file-using-system-diagnostics-eventlog), która szczegółowo opisuje, w jaki sposób rozwiązałem to. – dharmatech

2

Jeśli nadal chcesz to zrobić w sposób programowy, a nie ręczne tworzenie dziennika za pośrednictwem rejestru, istnieje sposób. Musisz najpierw sprawdzić i sprawdzić, czy EventSource istnieje, a jeśli nie, musisz go utworzyć. To musi się zdarzyć, zanim spróbujesz utworzyć instancję EventLog z tym źródłem. Zwróć uwagę na opóźnienie między tworzeniem i używaniem, więc upewnij się, że sobie z tym poradzisz (więcej informacji znajdziesz w artykule http://msdn.microsoft.com/en-us/library/2awhba7a(v=vs.110).aspx).

// Create the source, if it does not already exist. 
if(!EventLog.SourceExists("MySource")) 
{ 
    //An event log source should not be created and immediately used. 
    //There is a latency time to enable the source, it should be created 
    //prior to executing the application that uses the source. 
    //Execute this sample a second time to use the new source. 
    EventLog.CreateEventSource("MySource", "MyNewLog"); 
    Console.WriteLine("CreatedEventSource"); 
    Console.WriteLine("Exiting, execute the application a second time to use the source."); 
    // The source is created. Exit the application to allow it to be registered. 
    return; 
} 

// Create an EventLog instance and assign its source. 
EventLog myLog = new EventLog(); 
myLog.Source = "MySource"; 

// Write an informational entry to the event log.  
myLog.WriteEntry("Writing to event log."); 
+0

Jednym drobnym problemem z twoim kodem jest to, że jeśli używasz OS> = Vista, chyba że masz uprawnienia administratora, to SourceExists zawiedzie z SecurityException (jak właśnie dowiedziałem się podczas przenoszenia kodu z XP do W7). W takim przypadku musisz albo przyznać uprawnienia administratora aplikacji, albo samodzielnie utworzyć klucz (ręcznie lub podczas instalacji .msi) –

+0

Jeśli uruchomisz aplikację jako administrator, nie powinieneś mieć żadnych problemów. Jeśli bit UAC wciąż dopasowuje wysokość pasowania, możesz uruchomić wiersz polecenia jako Administrator, a następnie uruchomić aplikację, która zawiera ten kod, przechodząc z DOS do ścieżki aplikacji (np. Jeśli twoja aplikacja nazywała się "myapp.exe" i był w C: \ Temp, a następnie: 'C:> cd C: \ Temp', następnie' C: \ Temp> myapp.exe'). – vapcguy

1

ten jest zbliżony do innych rozwiązań rejestru oferowane tutaj, ale to jest, jak to zrobiłem na Windows 7 i zapisze w dzienniku aplikacji, nie Przekazywany Events log:

  • logo Windows> wpisać regedit w wyszukiwaniu, a następnie naciśnij Enter

  • Rozwiń HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog

  • Znajdź klucz Application i utworzyć nowy klucz dla danej aplikacji: MyApp

  • W MyApp prawym przyciskiem myszy oknie po prawej stronie w pustym obszarze i wybierz Nowy> Wartość ciągu rozwijalnego.Spowoduje to utworzenie wpisu REG_EXPAND_SZ. Nadaj mu nazwę EventMessageFile.

  • Kliknij dwukrotnie nowy wpis, aby ustawić wartość. Dla wartości wpisz: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\EventLogMessages.dll Wybierz OK.

  • Pozostaw wartość ciągu (Default) z wartością (value not set).

  • Powtórz jeszcze dwa razy, zamieniając CurrentControlSet na ControlSet001 i ControlSet002.

A jeśli trzeba następnie przenieść aplikację do innego komputera, można kliknąć prawym przyciskiem myszy i wybrać Export. Plik zostanie zapisany jako plik .reg, a następnie skopiowany do następnego komputera. Tam dwukrotnie kliknij, aby go uruchomić (po zalogowaniu się jako Administrator). W ten sposób nie musisz ręcznie tworzyć go ponownie, a dla innych aplikacji możesz edytować plik .reg w Notatniku i po prostu zmienić nazwę aplikacji, zapisz ją (pamiętaj, aby zmienić format na " Wszystkie pliki ", więc zachowuje na końcu .reg i nie zapisuje go jako pliku .txt), a następnie można go dwukrotnie kliknąć, aby uruchomić i wstawić klucz EventLog nowej aplikacji.