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

Как решить, где хранить состояние для каждого пользователя? Реестр? Данные приложения? Изолированное хранилище?

Когда должен использоваться реестр Windows для состояния для каждого пользователя, и когда мы должны использовать файловую систему, особенно папку AppData пользователя? (например, C:\Users\USERNAME\AppData). Где находится изолированное хранилище?

Есть ли довольно твердое правило, или это просто нечеткая вещь, например "использовать реестр, пока он не станет слишком большим для хранения данных в реестре". или "использовать все, что вы хотите использовать".

Существуют ли требования к логотипу Windows, которые влияют на решение?

Если я использую каталог AppData, как мне выбрать между Local, Roaming и LocalLow?

edit: Я просто заметил эти похожие вопросы:

Я обобщу ответы.

4b9b3361

Ответ 1

Если у вас небольшое количество пар ключ/значение и значения невелики, реестр очень велик - и вам не нужно развертывать xcopy, а затем использовать реестр (я знаю, что это не точно, но это обычно очевидно, когда работа с реестром становится болью).

Если вы хотите xcopy-развертывание, данные должны быть в той же папке, что и программа, но программа может находиться где-то в папке AppData, она не должна находиться под "программными файлами".

Используйте изолированное хранилище только тогда, когда оно вам нужно или ему нужно его использовать - например, ClickOnce.

В противном случае используйте AppData\Roaming, используйте Local или LocalLow, только если у вас есть веская причина.

EDIT: вот разница между Roaming, Local и LocalLow:

Windows имеет малоизвестную функцию, называемую "перемещаемые профили", общая идея заключается в том, что в корпоративной среде с этой функцией каждый пользователь может использовать любой компьютер.

Когда пользователь регистрируется в своих личных настройках, загружается с сервера, и когда он выходит из системы, его настройки загружаются обратно на сервер (фактический процесс более сложный, очевидно).

Файлы в папке "Роуминг" пользователя в Vista или "Данные приложения" в XP перемещаются вместе с пользователем - поэтому любые настройки и данные должны храниться там.

Файлы под "Local" и "LocalLow" в Vista и "Локальные настройки" в XP нет, поэтому это хорошее место для файлов temp, вещей, привязанных к конкретному компьютеру или данных, которые могут быть пересчитаны.

В Vista, как часть новых функций безопасности, которые все мы знаем и любим, вы можете иметь программы, работающие в режиме "низкой целостности" (например, IE в защищенном режиме), эти программы работают со сниженными привилегиями и не могут доступ к файлам в профиле пользователя - за исключением файлов в папке "LocalLow" .

Итак, в заключение, файлы, хранящиеся в "LocalLow" , по своей сути небезопасны, и файлы в "Локальных" / "Локальных настройках", вероятно, недоступны в некоторых крупных компаниях, поэтому, если у вас нет веских оснований и точно знать, что вы выполните "Роуминг" / "Данные приложения".

Ответ 4

Я не знаю, существует ли твердое правило, но нужно учитывать, что реестр трансактен - он безопасен для одновременных операций чтения/записи. Таким образом, если ваши пользовательские данные могут быть записаны несколькими потоками во время выполнения (или если у вас несколько экземпляров exe в вашем пакете продуктов), подумайте об использовании реестра.

История: Одна из причин (как я слышал) о том, что MS перешла из файлов .ini в реестр, была именно попытка попытаться решить проблему параллельного доступа.

.Net(вид) вернулся к файлам .ini в виде файлов xml.config, однако эти файлы конфигурации не должны быть записаны во время выполнения (или, по крайней мере, нет, если есть вероятность одновременных авторов/читателей).

Дополнительная информация: http://blogs.msdn.com/oldnewthing/archive/2007/11/26/6523907.aspx