Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Beim Schreiben ins EventLog: Security Exception
Mario_W
myCSharp.de - Member



Dabei seit:
Beiträge: 61
Herkunft: Sachsen

Themenstarter:

Beim Schreiben ins EventLog: Security Exception

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Tom
myCSharp.de - Member



Dabei seit:
Beiträge: 432
Herkunft: Home is where my notebook is

beantworten | zitieren | melden

Hallo Mario_W,

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

Gruß,
Tom
private Nachricht | Beiträge des Benutzers
Mario_W
myCSharp.de - Member



Dabei seit:
Beiträge: 61
Herkunft: Sachsen

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
LastGentleman
myCSharp.de - Member

Avatar #avatar-1696.jpg


Dabei seit:
Beiträge: 1274
Herkunft: Österreich

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Mario_W
myCSharp.de - Member



Dabei seit:
Beiträge: 61
Herkunft: Sachsen

Themenstarter:

beantworten | zitieren | melden

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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Mario_W am .
private Nachricht | Beiträge des Benutzers
Tom
myCSharp.de - Member



Dabei seit:
Beiträge: 432
Herkunft: Home is where my notebook is

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Mario_W
myCSharp.de - Member



Dabei seit:
Beiträge: 61
Herkunft: Sachsen

Themenstarter:

beantworten | zitieren | melden

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);
        }
    }
}
private Nachricht | Beiträge des Benutzers
Tom
myCSharp.de - Member



Dabei seit:
Beiträge: 432
Herkunft: Home is where my notebook is

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Mario_W
myCSharp.de - Member



Dabei seit:
Beiträge: 61
Herkunft: Sachsen

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
LastGentleman
myCSharp.de - Member

Avatar #avatar-1696.jpg


Dabei seit:
Beiträge: 1274
Herkunft: Österreich

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Tom
myCSharp.de - Member



Dabei seit:
Beiträge: 432
Herkunft: Home is where my notebook is

beantworten | zitieren | melden

Korrekt.

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

Gruß,
Tom
private Nachricht | Beiträge des Benutzers