2012-11-29 4 views
7

In unserer Anwendung gibt es bestimmte Umstände, bei denen nicht schwerwiegende Fehler auftreten und die Anwendung wiederhergestellt wird.Ist es akzeptabel, in die Application Event Source zu schreiben?

Ein Beispiel dafür, dass einige importierbare Elemente nicht korrekt identifiziert werden, wenn diese Elemente in eine Auswahlliste eingefügt werden. Die Fehler führen nicht zum Absturz der App, aber ein Benutzer wird darauf hingewiesen, dass einige der Elemente nicht geladen werden konnten.

In diesem Fall wird der Fehler im Anwendungsereignisprotokoll als Warnung protokolliert. Es handelt sich um einen nicht schwerwiegenden Fehler, bei dem die App wiederhergestellt wird. Wenn Sie jedoch im Ereignisprotokoll protokollieren, können wir den ursprünglichen Fehler ggf. anzeigen.

Unser Problem ist, dass die Software mit einem Power User-Konto installiert werden muss. Da wir kein Administratorkonto sind, können wir keine benutzerdefinierten Ereignisquellen für die Anwendung erstellen.

Ziel ist es, die Fehler stattdessen in die Ereignisquelle "Application" zu schreiben (die bereits im Anwendungsereignisprotokoll vorhanden ist). Dies führt jedoch dazu, dass auch Text ähnlich dem folgenden enthalten ist.

Die Beschreibung für die Ereignis-ID 0 aus der Quellanwendung wurde nicht gefunden. Entweder ist die Komponente, die dieses Ereignis auslöst, nicht auf Ihrem lokalen Computer installiert oder die Installation ist beschädigt. Sie können die Komponente auf dem lokalen Computer installieren oder reparieren.

Dies ist, weil die EventID 0 ist, wenn wir es schreiben. Dieser Ansatz wird die Arbeit erledigen, aber gibt es einen besseren Weg? Gibt es eine Nicht-Administrator-Möglichkeit, die EventID für die Anwendungsereignisquelle anzugeben, um anzugeben, dass sie aus unserer App stammt?

Antwort

0

Der Fehler Sie sehen Die Beschreibung für die Ereignis-ID 0 aus der Quellanwendung wurde nicht gefunden. Entweder ist die Komponente, die dieses Ereignis auslöst, nicht auf Ihrem lokalen Computer installiert oder die Installation ist beschädigt. Sie können die Komponente auf dem lokalen Computer installieren oder reparieren. ist das Ergebnis der registrierten Ereignisnachrichtendatei der Anwendungsquelle, die keinen Eintrag für Ereignis-ID 0 enthält. Die angezeigte Nachricht ist das Ergebnis des Abrufens der Vorlage für die Nachrichten-ID aus der Ereignisnachrichtendatei und Formatieren dieser Ereignisnutzlast.

Ich würde im Allgemeinen nicht empfehlen, dass Sie eine Quelle entführen, die Sie nicht besitzen. Wer diese Ereignisse konsumiert, hat spezifische Erwartungen darüber, was sie bedeuten und welche Informationen sie tragen.

In Bezug auf Gibt es eine non-admin Möglichkeit, die EventID für die Anwendungsereignisquelle anzugeben, um anzuzeigen, dass es aus unserer App stammt?, was erwarten Sie von der Event-ID-Spezifikation? Die Quelle ist, was bestimmt, woher das Ereignis kam.

EDIT:

Sie den Fehler in der Ereignisanzeige erhalten, unabhängig davon, ob Sie bieten ein Ereignis-ID ungleich 0, weil die Quelle registriert keine Ereignismeldung Datei.Und selbst wenn dies der Fall wäre, müssten Sie entweder Ereignis-IDs verwenden, die einen Eintrag in der Nachrichtendatei haben (die die Konsumenten der Ereignisse verwirren), oder Ereignis-IDs, die keinen Eintrag haben und immer noch den Fehler erhalten.

+0

Ich habe etwas gelesen: die EventID kombiniert mit der Event Source identifiziert, welche Art von Ereignis auftritt. Kurz gesagt: Ich habe nichts gegen den Warnfehler, aber ich sollte nicht eine Quelle verwenden, die ich nicht erstellt habe. Ich bin nicht in der Lage, eine (keine Admin-Installation usw.) zu erstellen, also hoffe ich, eine Ereignisquelle zu finden, die für diese Art von Ereignissen verfügbar ist, oder einen anderen Mechanismus für die Protokollierung zu verwenden. Gedanken? – MoSlo

+0

Wenn Sie .NET 4.5 verwenden, können Sie mithilfe der EventSource-Klasse (http://msdn.microsoft.com/en-us/library/system.diagnostics.tracing.eventsource.aspx) Ereignisse in ETW schreiben, ohne dass eine Registrierung erforderlich ist . Der Nachteil ist, dass die Ereignisse nicht im Ereignisprotokoll gespeichert werden. Wenn Sie also nicht aktiv auf diese Ereignisse warten, erhalten Sie diese nicht. – fsimonazzi

0

Sie sind in der Lage, die Anwendung Ereignis-ID als Parameter zu übergeben: (Beispiel: 234)

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

Weiterführende Literatur in EventLog.WriteEntry Methode

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

+1

Nur der Vollständigkeit halber würde ich auch bearbeiten, um hinzuzufügen, dass es * OK ist, die Ereignisquelle * Application * wie folgt zu verwenden. (es sei denn, Sie stimmen nicht zu, dass es in Ordnung ist, natürlich!) –

+0

"Anwendung" in diesem Beispiel ist die Nachricht, nicht die Ereignisquelle. Die Ereignisquelle ist "dotNET Sample App". public static void Writeentry ( \t string source, \t string message, \t EventLogEntryType Typ, \t int eventID ) – fsimonazzi

+0

Dies ist die Frage nicht beantworten. Dies führt auch zu "Die Beschreibung für Event ID 234 aus der Quellanwendung kann nicht gefunden werden." – user2864740