2009-08-28 8 views
1

Der Code, an dem ich gerade arbeite, läuft unter Windows Server 2003, muss aber auf mehreren Maschinen in EventLogs schreiben können. Ich codiere in C# mit VS2008 Pro und .NET Framework 3.5.UAC gibt mir passt!

Der Code selbst ist relativ einfach (dank Rahmen):

using (EventLog remoteEvtLog = new EventLog(LogName, HostName, EventSource)) 
{ 
    remoteEvtLog.WriteEntry(Body); 
} 

„LogName“ ist eine Zeichenfolge, die den Namen des Protokolls enthält, zu schreiben - in den meisten Fällen „Anwendung“. "HostName" ist eine Zeichenfolge, die den NetBIOS-Namen des Computers enthält, auf den der Protokolleintrag geschrieben werden soll. „Eventsource“ ist eine Zeichenfolge, die den Namen des Ereignissenders enthält (dies ist ein Dienstprogramm von mehreren Anwendungen verwendet wird, so wird in der Regel die Namen der Verbraucher Anwendung hat). "Body" ist eine Zeichenfolge, die den Text enthält, der in das Ereignisprotokoll geschrieben werden soll.

In den meisten Fällen funktioniert dies gut, aber wenn die Maschine UAC verwendet geschrieben werden, jede Schreib die eine neue Eventsource erstellt ausfällt. Dies tritt auf, obwohl die verwendeten Sicherheitsanmeldeinformationen Mitglieder der Gruppe Administratoren sind - und ich konnte keinen Weg finden, die erhöhte Berechtigungsstufe anzugeben. Offenbar Mitglieder der Administratoren goroup zwei Token zu erhalten - eine begrenzte und eine erhöhte, aber soweit ich das beurteilen kann, ist der einzige Weg, um den erhöhten Token specifiy ist über die Benutzeroberfläche - die offensichtlich ein Problem ist, wenn der Ferne die Protokolle zugreifen.

Irgendwelche Ideen da draußen?

Antwort

0

Ihr Code ist nicht angeblich neue Ereignisquellen erstellen (das Vermächtnis automatisch erstellen Verhalten ist bedauerlich, aber immer noch falsch). Wenn Sie eine separate Ereignisquelle für Ihre Anwendung benötigen, sollte das Installationsprogramm für diese Anwendung - die mit erhöhten Administratorrechten ausgeführt wird - diese erstellen.

+0

Und wie würde man gehen über das Installationsprogramm mit (von VS-Setup-Deploy-Projekt?), Das zu tun? (Entschuldigung für Hi-Jacking). – Nate

+0

Ich glaube nicht, dass Sie dies mit einem VS-Setup-Projekt tun können - das Ding ist extrem eingeschränkt in dem, was es tun kann. Sie können natürlich das resultierende MSI in Orcas manuell bearbeiten, aber das ist äußerst unbequem. Im Allgemeinen sollten Sie, wenn Sie feststellen, dass Sie mehr als nur Setup-Projekte benötigen - was für eine reale Anwendung nahezu sicher ist - zu WiX wechseln. –

+1

Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Standardprojekt: Wählen Sie Hinzufügen> Neues Element. Wählen Sie im Dialogfeld die Klasse Installer-Klasse aus und geben Sie ihr ein Eine neue Klasse wird hinzugefügt - fügen Sie diese nach dem Aufruf von InitialCompnent() hinzu ! Code: if (EventLog.SourceExists ("MySource") EventLog.CreateEventSource ("MySource", "Application"); ein Setup-Projekt hinzufügen & Primary Output der rechten Maustaste auf das Setup-Projekt hinzufügen, wählen Sie Ansicht > CustomActions- den Ordner installieren Rechtsklick, Benutzerdefinierte Aktion Wählen Sie Anwendungsordner, dann Primary Output hinzufügen wählen - klicken Sie auf OK 0123. Speichern und erstellen - Der von Ihnen hinzugefügte Code wird beim Setup ausgeführt – DragonsRightWing