Подтвердить что ты не робот

Лучшее место для хранения файлов конфигурации и файлов журналов в Windows для моей программы?

Мне нужно хранить файлы журналов и файлы конфигурации для моего приложения. Где лучше всего их хранить?

Прямо сейчас, я просто использую текущий каталог, который заканчивается тем, что помещает их в каталог Program Files, где живет моя программа.

Файлы журнала, вероятно, будут доступны пользователю несколько регулярно, поэтому %APPDATA% кажется немного труднодоступным.

Лучше ли каталог под %USERPROFILE%\My Documents? Он должен работать для всех версий Windows, начиная с 2000 года.

4b9b3361

Ответ 1

Если вы не используете ConfigurationManager для управления вашим приложением и пользовательскими настройками, вы должны быть. Инструментарий конфигурации в .NET Framework замечательно хорошо проработан, а инструменты Visual Studio, которые взаимодействуют с ним, тоже.

Поведение ConfigurationManager по умолчанию задает как инвариантные (приложения), так и модифицируемые (пользовательские) настройки в правильных местах: параметры приложения входят в папку приложения, а пользовательские настройки идут в System.Environment.SpecialFolder.LocalApplicationData. Он работает правильно во всех версиях Windows, поддерживающих .NET.

Что касается файлов журналов, System.Environment.SpecialFolder.LocalApplicationData, как правило, это место, которое вы хотите поместить, поскольку оно гарантировано для записи пользователем.

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

У меня есть несколько жалоб на ConfigurationManager и VS-инструменты: там должна быть более качественная документация высокого уровня, чем есть, и лучшая документация класса VS Settings. Механизм, с помощью которого файл app.config переходит в файл конфигурации приложения в каталоге целевой сборки, непрозрачен (и является источником одного из наиболее часто задаваемых вопросов: "что случилось с моей строкой соединения?" ). И если есть способ создания настроек, которые не имеют значений по умолчанию, я его не нашел.

Ответ 2

Для параметров приложения - используйте System.Environment.SpecialFolder.ApplicationData - здесь хранятся данные перемещаемого профиля, поэтому он позволяет вашему пользователю регистрироваться и работать с разных компьютеров в домене.

Для файлов журнала - System.Environment.SpecialFolder.LocalApplicationData​​p >

Ответ 3

Примечание. Вы можете получить путь к папке LocalApplicationData в .NET с помощью следующей функции:

string strPath=System.Environment.GetFolderPath(System.Environment.SpecialFolder.LocalApplicationData);

Ответ 4

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

Ответ 5

В принятом ответе отмечается, что для файлов журналов следующее хорошее место. System.Environment.SpecialFolder.LocalApplicationData Это соответствует пути к C:\Users\[User]\AppData\Roaming, который вы видите, является специфичным для пользователя. Как и в принятом ответе, это гарантированное удобное для пользователя место и может быть полезно для определенных ситуаций.

Однако в среде веб-приложения вы можете запускать свое приложение под учетной записью сети, и вам или коллеге может понадобиться попробовать и отследить, где именно эти журналы идут на приложение. Я лично хотел бы использовать перечисление нулевого пользователя System.Environment.SpecialFolder.CommonApplicationData, который равен C:\ProgramData. Да, вам нужно будет указать права доступа для любых создаваемых вами папок, но обычно это одноразовая сделка, и тогда все журналы приложений могут жить в одном счастливом месте.

Кроме того, при просмотре в Интернете есть проект, чтобы программно установить доступ на запись к папкам, созданным в CommonApplicationData, Разрешить запись/изменение доступ к данным CommonApplicationData.

Ответ 6

Не храните файлы конфигурации в папке приложения, Microsoft заявила, что это НЕ идеальное место. Windows движется к блокировке записи в C:\Program Files \, и вы увидите в Vista любое приложение, которое пытается написать здесь, запустит предупреждение UAC.

Windows 7 позволит пользователям настраивать всплывающие окна UAC, которые они используют (ожидают, что некоторые пользователи могут блокировать большинство из них), и ваше приложение будет терпеть неудачу/заморозить, если пользователь никогда не одобрит эту попытку записи.

Если вы используете правильные переменные userprofile и appdata, тогда Win 2000, XP, Vista и Win7 будут отображать данные в соответствующую удобную для записи папку без всплывающих окон UAC.

Ответ 7

Вы можете использовать SHGetSpecialFolderPath:

int MAX_PATH = 255;

CString m_strMyPath;

SHGetSpecialFolderPath(NULL, m_strMyPath.GetBuffer(MAX_PATH), CSIDL_COMMON_APPDATA, TRUE);

В этом поле указывается "специальный путь к папке", который можно безопасно записывать для окон:

Для XP: C:\Documents and Settings\All Users\Application Data

Для Vista: C:\ProgramData

Проверьте страницу MSDN здесь: http://msdn.microsoft.com/en-us/library/bb762204(VS.85).aspx

Ответ 8

Лучший ответ зависит от характера журналов и конфигураций. Если они являются программными, и вам не нужно пережить удаление приложения, я думаю, что они в порядке, где они есть. Если журналы и конфигурации являются специфичными для пользователя или вам нужно выжить при удалении, то они принадлежат где-то в% USERPROFILE% -% APPDATA%, являющемся "правильным" базовым каталогом для этого типа вещей.

Ответ 9

Я использую Изоляционное хранилище для конфигурации. Вы также можете использовать папку Temp для хранения временной информации, например журнала.