файл журнала log4net не отображается в проводнике Windows в подпапке установки приложения - PullRequest
0 голосов
/ 04 января 2019

Я использую log4net для настольного приложения, написанного на c # и развернутого с использованием расширения Visual Studio «Проекты установщика Microsoft Visual Studio» (MSI-Installer). После установки я не вижу подпапку журнала, определенную для log4net.

TARGETDIR в « проектах установщика Microsoft Visual Studio » определяется как [ProgramFiles64Folder][Manufacturer]\[ProductName].

Файл журнала log4net определяется как

<appender name="rollingFile" type="log4net.Appender.RollingFileAppender,log4net">
   <param name="File" value=".\log\MyApp.log" />
   <!-- ... -->

После установки приложения через «Проекты установщика Microsoft Visual Studio» - созданный setup.exe и msi-installer я не вижу папка журнала в проводнике Windows в папке Program Files \ MyManufacturer \ MyProductName хотя Показывать скрытые файлы, папки ... установлен.

В целях тестирования я добавил следующий код в свое приложение:

// does log file exist and grow ?
string currdir = Directory.GetCurrentDirectory();
MessageBox.Show(currdir, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
string[] sa = File.ReadAllLines(currdir + "\\log\\MyApp.log");
MessageBox.Show(sa.Length.ToString(), "Error", MessageBoxButton.OK, MessageBoxImage.Error);
// show lines created this year (2019)
string s = "";
for (int i = 0; i < sa.Length; i++)
{
    if(sa[i].Contains("2019")) 
        s = s + sa[i] + "\n";
}
MessageBox.Show(s, "Error", MessageBoxButton.OK, MessageBoxImage.Error);

Итак, файл журнала под Program Files\MyManufacturer\MyProductName\log\MyApp.log можно получить доступ через приложение, и я вижу, что оно растет!

Итак, вопрос: где находится подкаталог log? Как я могу сделать это видимым в проводнике Wndows? Это проблема с разрешением?

1 Ответ

0 голосов
/ 05 января 2019

Короткая версия : проверьте, есть ли у вас виртуализированные папки в: %LocalAppData%\VirtualStore.

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


Битность? : Вы уверены, что ищете нужную папку? Вы проверяли Program Files (x86), чтобы быть уверенным?


Виртуализация / перенаправление данных : Мне интересно, есть ли у вас политики, позволяющие автоматически перенаправлять неудачные записи в защищенных папках в другое доступное для записи место? Контроль учетных записей пользователей: виртуализировать ошибки записи файлов и реестра в местоположения отдельных пользователей .

Запись политики перенаправления данных / виртуализации :

Примечание : Апплет локальной политики безопасности доступен только в профессиональных, корпоративных и корпоративных версиях Windows. Это будет не хватать в «домашних изданиях».

Чтобы найти и изменить эту политику, выполните следующие действия (или аналогичные другие способы):

  1. Windows Key + кран R.
  2. Копирование и вставка: %windir%\system32\secpol.msc /s.
  3. Нажмите OK или нажмите Enter.
  4. Перейдите к: Local Policies\Security Options. Поиск записи: User Account Control: Virtualize file and registry write failures to per-user locations.
  5. Установлен ли этот параметр на «Activated»?

Предварительные условия : Даже если этот параметр активирован, перенаправление работает только при очень определенных обстоятельствах. Чтобы программа была пригодна для виртуализации, она должна соответствовать следующим требованиям:

  1. Битность : программа должна быть 32-битной.
  2. Права доступа : не должен запускаться с правами администратора.
  3. Манифест : не должен быть скомпилирован с файлом манифеста (указывая, что это для Vista или позже). Или вы закомментируете безопасность раздел.

(технические подробности о том, как создать тестовое приложение, см. Ниже). Все это из этого источника . И вот еще один SO-ответ .

Диспетчер задач и виртуализация : Вы можете увидеть virtualization status программы, добавив Virtualization column к Страница процессов в диспетчере задач (в Windows 10 используется представление Details - там должно быть что-то вроде UAC-Virtualization):

Task Manager UAC-Virtualization

Куда это записывает? : Если этот параметр перенаправления / виртуализации данных активен, журнал автоматически перенаправляется в доступное для записи место, в то же время показывая исходный путь в приложении. Пожалуйста, проверьте под: %LocalAppData%\VirtualStore. Процедура:

  1. Windows Key + кран R.
  2. Копирование и вставка: %LocalAppData%\VirtualStore.
  3. Нажмите OK или нажмите Enter.
  4. Проверить подпапки (если есть).

Решение : Эту проблему можно решить несколькими способами.

  1. Место записи : Пишите прямо в доступное для записи место - по замыслу. На мой взгляд, это единственный разумный подход на будущее.

  2. Разрешения ACL : Вы можете открыть разрешение на запись в указанное место и разрешить пользователям или всем пользователям доступ для записи. я делаю не такой подход с точки зрения безопасности.

  3. Повышение : я полагаю, вы можете запустить приложение с правами администратора с помощью манифеста повышения прав. Мне очень не нравится это подход. Повышенным приложениям дают «ключи от города» ипредставляют серьезную угрозу безопасности.

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


Технические примечания : Только для записи. Что касается тестового приложения, которое я использовал для отладки:

  1. Стандартное приложение Windows Forms C #.
  2. При событии нажатия кнопки или непосредственно в основной функции: File.WriteAllText(@"C:\Program Files\My folder\TestFile.txt", "Test"); (сначала создайте путь и настройте часть "Program Files" на свой язык)
  3. Project => Add New Item... => Application Manifest File.
  4. Закомментируйте весь раздел "Security".
  5. Скомпилируйте 32-битный исполняемый файл.

Теперь попробуйте собрать и запустить. Вы должны увидеть приложение, активированное для виртуализации, в столбце UAC-Virtualization из Диспетчер задач (снимок экрана выше). Нажатие кнопки должно записать в %LocalAppData%\VirtualStore, если активна политика перенаправления данных / виртуализации.


Некоторые ссылки :

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...