Куда log4net может записывать файлы журналов, совместимые с XP, Vista и Windows 7?

#windows-7 #log4net

#windows-7 #log4net

Вопрос:

У меня есть C#.NET приложение 4.0, использующее log4net для ведения журнала. В Windows XP файлы журналов всегда записываются в систему.Windows.Формы.Приложение.CommonAppDataPath, и это работает и для пользователей-администраторов в Windows 7, даже если для UAC установлен уровень по умолчанию. Однако при запуске от имени ограниченного пользователя в Windows 7 с UAC на том же уровне файлы журналов не записываются.

Есть ли способ заставить log4net получать доступ к тем же файлам журналов при запуске от имени ограниченного пользователя, или я вынужден использовать System.Windows.Формы.Приложение.Вместо этого UserAppDataPath и иметь разные файлы журналов для каждого пользователя? Я бы предпочел иметь единый набор файлов журналов для всех пользователей, если это возможно, поскольку это значительно упрощает поддержку клиентов.

Наконец, программа должна запускать «asInvoker», поэтому повышение уровня приложения не является вариантом.

Комментарии:

1. Правильно ли предположить, что вы не хотели бы просто создать папку, в которую log4net будет записывать? Например, когда приложение устанавливается на компьютер, вы могли бы создать новую папку в корне основного диска и назвать ее «logfiles» или что-то в этом роде. Разве это не вариант?

2. Это может быть одним из вариантов. Я мог бы также рассмотреть возможность создания этой папки в качестве подпапки CommonAppDataPath. Пока там есть только файлы журналов, я не думаю, что это должно быть проблемой с точки зрения безопасности. У нас есть несколько очень параноидальных клиентов с точки зрения безопасности, поэтому мы довольно ограничены в размещении папок, доступных для записи во всем мире.

Ответ №1:

Что, если изменить разрешения для папки c:programdataxxx (где xxx — название вашей компании), чтобы разрешить доступ на запись для всех?

Комментарии:

1. Это приходило мне в голову, но я бы предпочел не связываться с разрешениями для папки приложения в ProgramData, поскольку это, по-видимому, нарушает дух UAC.

Ответ №2:

В итоге я сделал вариант предложения sgmoore. Я создал папку под названием C:ProgramData [Название компании] [ProductName]logs, в котором я разрешил доступ на запись для группы локальных пользователей. Преимущество этого заключается в сохранении минимального доступа ко всем другим файлам в ProgramData, предоставляя необходимый доступ только к файлам журналов тем, кто в этом нуждается.

Комментарии:

1. Я предполагаю, что в ваших обстоятельствах у вас нет злоумышленников, потому что это также означает, что любой пользователь может уничтожить все журналы.

2. Да, мы предполагаем это. Это настольное приложение, которое запускается на компьютере с контроллером прибора в лаборатории и на настольных системах исследователей, поэтому мы обычно не беспокоимся о злоумышленниках. Поскольку журналы, как правило, читаются нашими сервисными специалистами только во время выездов в службу поддержки на местах в диагностических целях, уничтоженные файлы журналов в любом случае не будут полной катастрофой.