Discussion:
UAC vs. EventLog
(zu alt für eine Antwort)
Christian Stelte
2009-06-16 12:30:09 UTC
Permalink
Hi!

Ich schreibe mit meinem Programm Status-/Fehlermeldungen in die Anwendung-Ereignissanzeige.

System.Diagnostics.EventLog appLog = new System.Diagnostics.EventLog();
appLog.Source = "Programmname";
appLog.WriteEntry(EventMessage, EntryType, eventID);
appLog.Close();

Solange das Programm als Administrator ausgeführt wird ist das kein Problem, aber wenn es eingeschränkt läuft kollidiert es mit dem
SecurityLog, wenn ich die Meldung richtig deute:

"Die Quelle wurde nicht gefunden, aber einige oder alle Ereignisprotokolle konnten nicht durchsucht werden. Protokolle, auf die kein
Zugriff möglich war: Security"


Es muss doch möglich sein, das ein eingeschränkter Admin (also ohne "Als Administrator ausführen") bzw. ein normaler User ein
Programm benutzt welches Einträge in das EventLog macht!?

Was muss ich meinem Programm noch beibiegen?

Chris
Kerem Gümrükcü
2009-06-16 13:23:22 UTC
Permalink
Hallo Christian,

AFIAK musst Du für diese Aktion ein "echter" Administrator sein, ggf.
schau dir das noch mal an:

http://support.microsoft.com/kb/918122/en-us

Aber mich wundert das jetzt auch etwas, dass das nicht
geht, zumal ich dieses Problem jetzt das erste mal so
sehe,...

Grüße

Kerem
--
--
-----------------------
Beste Grüsse / Best regards / Votre bien devoue
Kerem Gümrükcü
Latest Project: http://www.pro-it-education.de/software/deviceremover
Latest Open-Source Projects: http://entwicklung.junetz.de
-----------------------
"This reply is provided as is, without warranty express or implied."
Post by Christian Stelte
Hi!
Ich schreibe mit meinem Programm Status-/Fehlermeldungen in die Anwendung-Ereignissanzeige.
System.Diagnostics.EventLog appLog = new System.Diagnostics.EventLog();
appLog.Source = "Programmname";
appLog.WriteEntry(EventMessage, EntryType, eventID);
appLog.Close();
Solange das Programm als Administrator ausgeführt wird ist das kein
Problem, aber wenn es eingeschränkt läuft kollidiert es mit dem
"Die Quelle wurde nicht gefunden, aber einige oder alle Ereignisprotokolle
konnten nicht durchsucht werden. Protokolle, auf die kein Zugriff möglich
war: Security"
Es muss doch möglich sein, das ein eingeschränkter Admin (also ohne "Als
Administrator ausführen") bzw. ein normaler User ein Programm benutzt
welches Einträge in das EventLog macht!?
Was muss ich meinem Programm noch beibiegen?
Chris
Christian Stelte
2009-06-16 13:37:28 UTC
Permalink
Post by Kerem Gümrükcü
Aber mich wundert das jetzt auch etwas, dass das nicht
geht, zumal ich dieses Problem jetzt das erste mal so
sehe,...
Habs geschaft, hiermit gehts:

string source = "Programmname";

if (!EventLog.Exists("Application"))
System.Diagnostics.EventLog.CreateEventSource(source, "Application");
EventLog.WriteEntry(source, EventMessage, EntryType, eventID);

Warum macht das CreateEventSource() mein Programm jetzt "sicherer", so das
die UAC nicht mehr einschreiten muss?

Da müssten jetzt mal die Experten ran! :-)

Die erste Lösung lief Jahre unter XP und 2003.

Chris
Frank Dzaebel
2009-06-16 18:21:32 UTC
Permalink
Hallo Christian,
Post by Christian Stelte
string source = "Programmname";
if (!EventLog.Exists("Application"))
System.Diagnostics.EventLog.CreateEventSource(source, "Application");
EventLog.WriteEntry(source, EventMessage, EntryType, eventID);
Da geht jetzt IMHO etwas durcheinander. Beachte
zunächst, dass unter Vista die Ereignis-Anzeige
deutlich erweitert wurde.

Folgendes wäre zum Beispiel eine Möglichkeit
unter Vista ohne CreateEventSource und ohne
Security-Exception unter "Windows-Protokolle/Anwendung"
eine EventLogEntry zu schreiben:

EventLog appLog = new System.Diagnostics.EventLog();
// bool exists = EventLog.SourceExists("Application"); //true
appLog.Source = "Application";
appLog.WriteEntry("Meine Info-EventMessage",
EventLogEntryType.Information, 1234);
appLog.Close();

//==============================
Post by Christian Stelte
Da müssten jetzt mal die Experten ran! :-)
Die erste Lösung lief Jahre unter XP und 2003.
Der Log-Eigenschaft des EventLog soltest Du z.B.
auf die englische einheitliche Bezeichnung setzen.
Den LogDisplayName dann (ggf.) auf die lokalisierte:

[EventLog.RegisterDisplayName-Methode (System.Diagnostics)]
http://msdn.microsoft.com/de-de/library/system.diagnostics.eventlog.registerdisplayname.aspx
(neben den anderen MessageId Ressourcen)

Schau Dir einfach mal im Debugger die
vorhandenen EventLogs an:

EventLog[] evts = EventLog.GetEventLogs();

Wenn Du in eine eigene Quelle loggen willst,
musstest Du auch schon unter XP oder W2003 diese anlegen
und benötigtest dort auch Administrator-Rechte -
nur, dass man ja unter XP oft seine Anwendung
unter Admin laufen hatte ;-)
Hier steht auch unter "Hinweis" ganz genau, wie
das Handling unter Vista sein sollte:

[EventLog.CreateEventSource-Methode (String, String) (System.Diagnostics)]
http://msdn.microsoft.com/de-de/library/2awhba7a.aspx

Beachte, dass die Admin-Rechte auch schon
bei "EventLog.SourceExist" gelten:

[EventLog.SourceExists-Methode (String, String) (System.Diagnostics)]
http://msdn.microsoft.com/de-de/library/8b25b3ee.aspx

Setze im Manifest Deiner Applikation im Manifest
entweder RequireAdministrator, oder informiere Dich hier:

[Step 6: Create and Embed an Application Manifest (UAC)]
http://msdn.microsoft.com/en-us/library/bb756929.aspx

Man könnte auch on demand eine Elavation durchführen.

[Wie Verwalten von Ereignisprotokollen, die Visual C# oder Visual C# 2005
verwenden]
http://support.microsoft.com/kb/815314


ciao Frank
--
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET
Kerem Gümrükcü
2009-06-16 13:23:22 UTC
Permalink
Hallo Christian,

AFIAK musst Du für diese Aktion ein "echter" Administrator sein, ggf.
schau dir das noch mal an:

http://support.microsoft.com/kb/918122/en-us

Aber mich wundert das jetzt auch etwas, dass das nicht
geht, zumal ich dieses Problem jetzt das erste mal so
sehe,...

Grüße

Kerem
--
--
-----------------------
Beste Grüsse / Best regards / Votre bien devoue
Kerem Gümrükcü
Latest Project: http://www.pro-it-education.de/software/deviceremover
Latest Open-Source Projects: http://entwicklung.junetz.de
-----------------------
"This reply is provided as is, without warranty express or implied."
Post by Christian Stelte
Hi!
Ich schreibe mit meinem Programm Status-/Fehlermeldungen in die Anwendung-Ereignissanzeige.
System.Diagnostics.EventLog appLog = new System.Diagnostics.EventLog();
appLog.Source = "Programmname";
appLog.WriteEntry(EventMessage, EntryType, eventID);
appLog.Close();
Solange das Programm als Administrator ausgeführt wird ist das kein
Problem, aber wenn es eingeschränkt läuft kollidiert es mit dem
"Die Quelle wurde nicht gefunden, aber einige oder alle Ereignisprotokolle
konnten nicht durchsucht werden. Protokolle, auf die kein Zugriff möglich
war: Security"
Es muss doch möglich sein, das ein eingeschränkter Admin (also ohne "Als
Administrator ausführen") bzw. ein normaler User ein Programm benutzt
welches Einträge in das EventLog macht!?
Was muss ich meinem Programm noch beibiegen?
Chris
Loading...