2012-11-29 27 views
7

Istnieją pewne okoliczności w naszej aplikacji, w których wystąpiły błędy krytyczne i aplikacja odzyskała.Czy dopuszczalne jest zapisywanie w Źródle zdarzeń aplikacji?

Przykładem tego niepowodzenia jest poprawna identyfikacja niektórych nadających się do importowania towarów po zapełnieniu tych pozycji do listy wyboru. Błędy nie powodują awarii aplikacji, ale użytkownik zostanie ostrzeżony, że niektóre elementy nie zostały załadowane.

W takim przypadku błąd jest rejestrowany w dzienniku zdarzeń aplikacji jako ostrzeżenie. To nie-krytyczny błąd, z którego odzyskuje się aplikacja, ale rejestracja w dzienniku zdarzeń pozwala nam zobaczyć oryginalny błąd, jeśli zajdzie taka potrzeba.

Naszym problemem jest to, że oprogramowanie musi być możliwe do zainstalowania na koncie użytkownika zaawansowanego. Nie będąc kontem administracyjnym, nie będziemy mieć możliwości tworzenia niestandardowych źródeł zdarzeń dla aplikacji.

Celem jest zapisanie błędów zamiast źródła zdarzenia "Aplikacja" (które już istnieje w dzienniku zdarzeń aplikacji). Jednak spowoduje to dodanie tekstu podobnego do poniższego.

Opis identyfikatora zdarzenia 0 ze źródła Aplikacja nie może zostać znaleziona. Element, który wywołuje to zdarzenie, nie jest zainstalowany na komputerze lokalnym lub instalacja jest uszkodzona. Możesz zainstalować lub naprawić komponent na lokalnym komputerze.

Dzieje się tak, ponieważ identyfikator zdarzenia ma wartość 0, gdy go piszemy. Takie podejście wykona zadanie, ale czy istnieje lepszy sposób? Czy istnieje sposób, aby określić identyfikator zdarzenia dla źródła zdarzenia aplikacji, aby wskazać, że pochodzi on z naszej aplikacji?

Odpowiedz

0

Błąd widać jak Nie można znaleźć opisu dla Identyfikatora zdarzenia 0 z aplikacji źródłowej. Element, który wywołuje to zdarzenie, nie jest zainstalowany na komputerze lokalnym lub instalacja jest uszkodzona. Możesz zainstalować lub naprawić komponent na lokalnym komputerze. jest wynikiem zarejestrowanego pliku komunikatu zdarzenia źródła aplikacji, który nie ma wpisu o identyfikatorze zdarzenia 0. Komunikat, który widzisz, jest wynikiem pobrania szablonu dla identyfikatora komunikatu z pliku komunikatu zdarzenia i sformatowania go przy użyciu ładunku zdarzenia.

Nie polecam generalnie przejęcia źródła, które nie należy do Ciebie. Ktokolwiek spożywa te wydarzenia, ma określone oczekiwania co do tego, co oznaczają i jakie informacje niosą.

Jeśli chodzi o Czy istnieje sposób, aby określić identyfikator zdarzenia dla źródła zdarzenia aplikacji, aby wskazać, że pochodzi on z naszej aplikacji?, jak myślisz, co oznacza ta specyfikacja zdarzenia? Źródło: jest określane skąd pochodzi wydarzenie.

EDIT:

Dostaniesz błąd w podglądzie zdarzeń, niezależnie od tego, czy stanowią Identyfikator zdarzenia innego niż 0, bo to źródło nie ma pliku komunikat zdarzenia zarejestrowany.A nawet gdyby tak było, musiałbyś użyć identyfikatorów zdarzeń, które mają wpis w pliku wiadomości (mylące konsumentów zdarzeń) lub identyfikatory zdarzeń, które nie mają wpisu i nadal dostają błąd.

+0

Zrobiłem kilka odczytów: Identyfikator zdarzenia w połączeniu ze źródłem zdarzeń określa, jakie zdarzenie ma miejsce. W skrócie: Nie mam nic przeciwko ostrzeżeniu o błędzie, ale nie powinienem używać źródła, którego nie stworzyłem. Nie jestem w stanie go utworzyć (instalacja bez administratora itp.), Więc mam nadzieję znaleźć źródło zdarzeń dostępne dla tego rodzaju zdarzeń lub użyć innego mechanizmu logowania. Myśli? – MoSlo

+0

Jeśli korzystasz z .NET 4.5, możesz użyć klasy EventSource (http://msdn.microsoft.com/en-us/library/system.diagnostics.tracing.eventsource.aspx) do zapisywania zdarzeń do ETW bez konieczności rejestracji . Minusem jest to, że zdarzenia nie są zapisywane w dzienniku zdarzeń, więc jeśli nie będziesz aktywnie słuchać tych wydarzeń, nie dostaniesz ich. – fsimonazzi

0

Jesteś w stanie przekazać aplikacji Identyfikator zdarzenia jako parametr: (przykład: 234)

EventLog.WriteEntry("Application", "your log message here", EventLogEntryType.Warning, 234); 

Dalsza lektura na EventLog.WriteEntry Metoda

http://msdn.microsoft.com/en-us/library/xzwc042w.aspx

+1

Dla większej kompletności, chciałbym również edytować, aby dodać, że * jest * OK, aby użyć źródła takiego * aplikacji * takiego jak to. (chyba że nie zgadzasz się, oczywiście, że jest OK!). –

+0

"Aplikacja" w tym przykładzie to wiadomość, a nie źródło zdarzenia. Źródłem zdarzenia jest "aplikacja przykładowa dotNET". public static void WriteEntry ( źródło \t ciąg wiadomość \t ciąg typ \t EventLogEntryType, \t int identyfikator_zdarzenia ) – fsimonazzi

+0

To nie jest odpowiedź na pytanie. Ponadto powoduje to "Nie można znaleźć opisu dla identyfikatora zdarzenia 234 z aplikacji źródłowej." – user2864740