Ich habe ein kleines Problem. Ich möchte einen Eitrag in das Ereignisprotokol schreiben dies funktioniert gut wenn ich Visual Studio als Admin ausführe. Wenn ich VS aber normal starte bekomme ich eine Security Exception. Jetzt habe ich gelesen das ich die Assembly auf FULL TRUST setzen sool aber irgendwie finde ich darüber nix.
Dies habe ich schon versucht habe es folgendermaßen probiert:
using (var appLog = new EventLog { Source = "ConsoleTestApp" })
{
EventLogPermission eventLogPermission = new EventLogPermission(EventLogPermissionAccess.Administer, ".");
eventLogPermission.PermitOnly();
appLog.WriteEntry("test2", EventLogEntryType.Error, 12);
}
Aber da bekomme ich immer noch die security Exception
Ein paar wichtige Infos fehlen bei deiner Beschreibung
Welcher Typ von Anwendung ist das IIS / Win APP?
Windows Version?
Hat der ausführende User Admin Rechte?
Gibt es deine Ziel Eventlog schon?
"Das Problem kennen ist wichtiger, als die Lösung zu finden, denn die genaue Darstellung des Problems führt automatisch zur richtigen Lösung." Albert Einstein
Auf dem rechner habe ich Admin rechte nur das VS führe ich nicht als Admin aus, wenn ich es als Admin ausführe funktioniert es. Als BS verwende ich VISTA64 Bit. Es ist eine Win anwendung
Ich muss gestehen ich hab mit Vista UAC nicht soviel Erfahrung, aber ich vermute mal EventLogPermissionAccess.Administer benötigt Administrator Rechte.
Probier mal EventLogPermissionAccess.Write wenn du wirklich nur schreiben willst.
Solltest du Administer benötigen wirst du ein Manifest erstellen müssen damit deine Anwendung mit UAC ein Administrator Token bekommt. Dann poppt aber UAC auf.
Gruß,
Tom
Hallo Tom
Danke für die Hilfe aber mit EventLogPermissionAccess.Write funktioniert es leider auch nicht. Ich habe jetzt die Assembly auf "Full Trust" gesetzt, nur das funktioniert auch nicht ich poste noch mal hier den kompletten Code:
using System;
using System.Diagnostics;
using System.Security.Permissions;
[assembly: PermissionSetAttribute(SecurityAction.RequestMinimum, Name = "FullTrust")]
namespace Logging
{
public class EventLogLogger
{
public EventLogLogger(string sourceApplicationName)
{
if (sourceApplicationName == null || sourceApplicationName.Trim() == string.Empty)
{
throw new ArgumentException(
"Parameter 'sourceApplicationName' darf nicht NULL oder eine leere Zeichenkette sein.");
}
this.SourceApplicationName = sourceApplicationName;
}
public enum EventId
{
ReadConfigValue = 1000,
PublisherService,
}
public string SourceApplicationName { get; private set; }
public void LogError(string message, EventId eventId)
{
this.LogError(message, (int)eventId);
}
public void LogError(string message)
{
this.LogError(message, 0);
}
public void WriteToLog(string message, int eventId)
{
using (var appLog = new EventLog { Source = "ConsoleTestApp" })
{
appLog.WriteEntry("test2", EventLogEntryType.Error, 12);
}
}
private void LogError(string message, int eventId)
{
this.WriteToLog(message, eventId);
}
}
}
Jetzt sehe ich es erst, du erstellst eine neue EventSource. Dafür benötigst du definitiv Admin Rechte.
Dachte bisher du willst in die normale Application reinschreiben.
Um Admin Rechte unter Vista zu erlangen benötigst du ein Manifest. Das lässt dann beim starten deiner Applikation UAC aufpopppen, welches der User bestätigen muss.
Siehe z.B.: UnauthorizedAccessException seit Vista
Gruß,
Tom
Danke Tom das mit dem manifest funktioniert super. Das Problem was ich aber immer noch habe ist die Anwendung soll später so verwendet werden das die Benutzer keine Adminrechte haben und das programm somit nicht als Admin ausgeführt werden kann 🙁
Dann musst die Anwendung Log File nehmen oder eine Event Log bei der Installation anlegen.
"Das Problem kennen ist wichtiger, als die Lösung zu finden, denn die genaue Darstellung des Problems führt automatisch zur richtigen Lösung." Albert Einstein
Korrekt.
Nimm am einfachsten die schon vorhandene Application Source und dann brauchst auch keine Admin Rechte.
Gruß,
Tom