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

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

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

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

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

edit: Я только что заметил подобные вопросы:

Я буду обобщать ответы.

Ответы [ 4 ]

13 голосов
/ 19 мая 2009

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

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

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

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

РЕДАКТИРОВАТЬ: Вот разница между роумингом, Local и LocalLow:

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

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

Файлы в пользовательской папке «Roaming» в Vista или «Application Data» в XP перемещаются вместе с пользователем - поэтому любые настройки и данные должны храниться там.

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

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

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

5 голосов
/ 19 мая 2009

Не загромождайте мой реестр, спасибо.

Используйте изолированное хранилище, вот для чего оно.

См. Была ли реестр Windows хорошей идеей? В блоге Джеффса ...

4 голосов
/ 19 мая 2009

Возможно, вы захотите рассмотреть Изолированное хранилище .

1 голос
/ 19 мая 2009

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

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

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

Подробнее: http://blogs.msdn.com/oldnewthing/archive/2007/11/26/6523907.aspx

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