Я пишу небольшую dll для моего webapp. Я отслеживаю службу, у меня есть веб-страница, показывающая, работает ли служба, остановлена или что-то другое. Поэтому я хотел бы получить последние 10 записей EventLog, зарегистрированных этой службой. Но когда я делаю, я получаю исключение, вызывая ToArray()
. Что мне делать?Не удается прочитать журнал событий из-за SecurityException
public static IEnumerable<EventLogEntry> GetEventLogs(string serviceName)
{
if (!EventLog.SourceExists(serviceName))
throw new ArgumentException("Service not found", "serviceName");
var myLog = new EventLog { Source = "MySource" };
var entries = myLog.Entries;
return (from EventLogEntry entry in entries
where entry.Source == serviceName
select entry).ToArray();
}
Так EventLog.SourceExists(serviceName)
возвращается true
, но после того, как он выходит из строя.
Он терпит неудачу в то время как переборе Security
папку, но мне нужно Application
только
Решенные
Забавно, что я могу читать из указанной папки, однако. Это зависит от Log
объекта EventLog
класс. Поэтому я должен просто заменить одну строку на это
var myLog = new EventLog {Source = "MySource", Log = "Application"};
Другая шутка - это иногда работает. А иногда нет. Например, этот код работает для моих служб, но не работает с услугой netprofm
. tnx для помощи всем
Я могу работать как администратор, но на стороне клиента я не буду. Могу ли я программно повышать привилегии, возможно, используя манифест и так далее? А также проблема в том, что я пишу dll, поэтому код вызова также должен быть запущен как администратор ... –
@AlexJoukovsky Elevation - это возможность, это зависит от того, какое это приложение. Если ваша DLL находится в GAC, вы должны иметь возможность записывать в журнал событий через это, поскольку у GAC будут привилегии для этого.Это в основном связано с требованием, чтобы для установки GAC вам нужно было иметь права администратора при установке приложения для начала. Если клиент полностью не в состоянии сделать это, тогда нет никакого способа обойти этот AFAIK. – tnw
Добавлена некоторая информация выше –