Laden...

Beim Schreiben ins EventLog: Security Exception

Erstellt von Mario_W vor 14 Jahren Letzter Beitrag vor 14 Jahren 2.610 Views
M
Mario_W Themenstarter:in
61 Beiträge seit 2008
vor 14 Jahren
Beim Schreiben ins EventLog: Security Exception

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.

T
433 Beiträge seit 2006
vor 14 Jahren

Hallo Mario_W,

hast du schon einmal einen Blick in die EventLog geworfen?
Speziell die 'Important' Bereiche.

Gruß,
Tom

M
Mario_W Themenstarter:in
61 Beiträge seit 2008
vor 14 Jahren

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

1.274 Beiträge seit 2005
vor 14 Jahren

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

M
Mario_W Themenstarter:in
61 Beiträge seit 2008
vor 14 Jahren

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

T
433 Beiträge seit 2006
vor 14 Jahren

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

M
Mario_W Themenstarter:in
61 Beiträge seit 2008
vor 14 Jahren

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);
        }
    }
}

T
433 Beiträge seit 2006
vor 14 Jahren

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

M
Mario_W Themenstarter:in
61 Beiträge seit 2008
vor 14 Jahren

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 🙁

1.274 Beiträge seit 2005
vor 14 Jahren

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

T
433 Beiträge seit 2006
vor 14 Jahren

Korrekt.

Nimm am einfachsten die schon vorhandene Application Source und dann brauchst auch keine Admin Rechte.

Gruß,
Tom