| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Где правильно хранить данные программы? |
| Автор: Rohoss 17.1.2009, 02:07 |
| К примеру, у меня есть программа, которую будут использовать несколько юзеров на одной машине. Программа, в процессе своей работы накапливает некоторые данные, с которыми работает сама, без вмешательства юзера. Тем не менее, для каждого юзера данные различные. Мне известны два наиболее распространенных варианта, каждый из которых имеет свои недостатки: 1. Хранить данные в папке с программой. Пример qip. Тут недостаток в том, что любой юзер будет иметь доступ к файлам другого юзвера, кроме что ограничивать доступ вручную. 2. Второй вариан, как делают большинство программ, хранить данные в папке «Application Data» юзера. Этот вариант мне больше нравится, но он не лишен недостатков. При переустановки системы все данные пойдут на юг лесом. А к примеру qip можно держать на другом разделе и даже не морочится с установкой. Да и настолько мне кажется философия .Net говорит в пользу первого варианта… Какой по Вашему мнению вариант более правильный, или есть третий хороший вариант? |
| Автор: Фантом 17.1.2009, 02:32 |
| Есть два нормальных варианта: 1) Хранить данные в папке "Application Data" юзера. Надеяться, что сисадмин компьютера, на котором установлена программа, не идиот, и перенес пользовательские профили на другой раздел, отличный от системного. 2) Пользоваться операционными системами с разумно организованной файловой системой (в которых от сисадмина не требуются проявления интеллекта для решения подобных задач). |
| Автор: Rohoss 17.1.2009, 03:22 | ||||
Там может иметь доступ разве что юзверь с учётной записью администратора.
Посмотри ту же папку «Application Data», там все данные такого типа. Если данные (файлы), предназначены для работы с ними юзверя, они хранятся в папке «Мои документы» А почему к ним давать доступ кому попало? |
| Автор: CodeMonkey 17.1.2009, 10:53 | ||
| Я за v2. Если выбираешь вариант 1, то ты фактически вешаешь на своей программе крест для обычных (не продвинутых) пользователей. И вот почему. Потому что не продвинутый пользователь ставит программу в папку по-умолчанию, т.к. он не знает, как её сменить. А папка по-умолчанию - это Program Files. А Program Files - это только чтение для не админов - ок, в XP и ниже считай все работают админами (за исключением корпоративной среды) - а в Vista и выше - наоборот. Соответственно, ваша программа не будет работать, если её устанавливать по-дефолту (практика "жми Next/Next/Next..."). P.S. Я, кстати, QIP сам не люблю за то, что он профили в папке с пользователями хранит. Вместо того, чтобы перетащить свой профиль на другую машину, мне теперь приходится по всему винту шерстить в поисках этих программ, которые хрен знает где хранят свои данные. Хорошо хоть Infium версия научилась делать правильно. P.P.S. http://msdn.microsoft.com/en-us/library/bb776892(VS.85).aspx, http://msdn.microsoft.com/en-us/library/ms995853.aspx. Добавлено через 2 минуты и 52 секунды
Тот же QIP: переписка с заказчиком, "волшебные" номера, явки, пароли... Извините, лучше я в папке AppData это буду хранить (ещё и атрибут шифрования накину), чем, скажем, в корне D ;) |
| Автор: kemiisto 17.1.2009, 11:42 | ||||
CodeMonkey, и это по твоему без вмешательства юзера? Добавлено через 6 минут и 21 секунду
А я и сказал а может и не присутствовать. Добавлено через 7 минут и 46 секунд Да. И Фантом его уже озвучил - испоьзовать *nix системы! |
| Автор: CodeMonkey 17.1.2009, 12:29 |
Да, это я называю "без вмешательства пользователя". С моей точки зрения это данные, создаваемые программой автоматически. "С вмешательством" пользователя - это когда вы в текстовом редакторе что-то написали и выбрали "Сохранить как". А то, что эти данные ещё куда-то программа может скидывать - это уже другое дело. А что тогда по-вашему без вмешательства юзера? Без вмешательства юзера компьютер даже не включится. Как насчёт водящего мыла? Это с вмешательством или без? Как насчёт кэша, где могут храниться критические данные. Это с вмешательством или без? Как насчёт автоматической БД thumbnails? Это с вмешательством или без? Суть в том, что всё это - данные пользователя, а, следовательно, доступ к ним должен быть ограничен. |
| Автор: Rohoss 17.1.2009, 13:12 |
| Я и сам за второй вариант. Всем спасибо, хотя дискуссию думаю можно и продолжить. |
| Автор: CodeMonkey 17.1.2009, 14:58 |
| Вообще это зависит от обстоятельств. Например, многие программы предлагают две версии: стационарную или мобильную (или же одну, но при установке спрашивается, куда ставим: на машину или на флешку). |
| Автор: OverFrosT 19.8.2010, 18:22 |
| Реестр: - непереносимость между машинами - помирает в случае падения винды + можно плодить копии проги с одним и тем же набором настроек + контроль доступа +? по-майкрософтовски кошерно + возможность делать иерархию + возможность записывать бинарные данные Ini + отличная переносимость + при падении винды легко скопировать + можно редактировать вручную (экспертные натстройки, которым не нашлось места в ГУЕ) - сложно организовать иерархию - сложно хранить бинарные данные (то есть, придётся кодировать в base64 или ещё как-нибудь) Xml + все плюсы Ini + иерархия любой вложенности и сложности - бинарные данные опять же в пролёте контроль доступа в случае файлов ложится на файловую систему. Хранение файла в папке с прогой: + прога самодостаточна, портабельна, легко переносится (в т.ч. на флешку или компакт) - права доступа в XP+ - несколько юзеров юзают одни настройки Хранение файла в AppData: + с правами доступа всё ОК (причем по дефолту) + у каждого юзера свои настройки - прога не самодостаточна, при переносе нужно искать файл "где-то там" В общем, мой выбор таков: 1) Файлы - однозначно. Формат файла определяется нуждами, глупо для линейного набора параметров "key=value" юзать XML. 2) При запуске проверка на наличие файла в папке с программой (либо любой другой способ указать программе, чтобы искала настройки рядом с собой - дополнительный файл seek_settings_here или portable.dat (а-ля AlReader и PDF-XChange Viewer) либо файл самых общих настроек, указывающий относительный путь к подпапке с персональными настройками (а-ля FileZilla) - не суть). Но делать ОБЯЗАТЕЛЬНО! Ибо портабельность рулит. 3) Если рядом с собой настроек не найдено - идти в AppData. Именно такая схема используется в uTorrent, и я считаю её оптимальной. Она удовлетворяет двум самым важным аспектам: портабельности путём несложной настройки и многопрофильности+разграничению прав. Реестр в этом случае по некоторым аспектам идёт вровень, по некоторым - проигрывает. |
| Автор: Qu1nt 19.8.2010, 20:30 |
Base64. |
| Автор: k0rvin 19.8.2010, 20:50 | ||
если юзер совсем нуб поставил прогу в "C:/Program Files", то и при первом варианте при переустановке системы все данные идут лесом. а домашний каталог можно и на другом разделе хранить, + мастер переноса файлов никто не отменял. |
| Автор: CodeMonkey 20.8.2010, 02:30 |
| Некрофилы |
| Автор: drkot 23.8.2010, 23:38 |
| Мммммда...... не дай бог Вам уважаемые писать коммерческий софт... А если по существу, то изучите соглашение для ос виндовс для разработчиков прикладных программ (особенно делая упор на висту и выше). И тогда не будет возникать глупых опросов о том "как написать софт коротый не будет работать у половины пользователей". Добавлено через 10 минут и 26 секунд Судя по голосованию ~40% напишут софт не совместимый с вистой... еще 40% сделают все чтобы сисадмин остальные определятся в зависимости от солнечной активности... как им поступить... что ж... это объективная реальность... удивляться тут нечему. Application Data - это данные приложения! но не как ни пользователя! и я даже не знаю как бы я Всех злобным кодерам советую изучить структуру хранения данных в opera (браузер такой)... имхо один из лучших вариантов организации данных приложения и пользователя. |
| Автор: Rohoss 24.8.2010, 22:01 | ||||
Вы бы внимательно прочитали первый пост, а потом ругались бы.
Вот именно, Application Data - это данные приложения, но для каждого пользователя они различны |
| Автор: Matematik 24.8.2010, 22:44 |
этот документик? http://download.microsoft.com/download/3/b/a/3ba6d659-6e39-4cd7-b3a2-9c96482f5353/Managing%20Roaming%20User%20Data%20Deployment%20Guide.doc |
| Автор: OverFrosT 25.8.2010, 16:21 | ||||||||
Qu1nt,
Если бездумно форматят системный диск - то конечно, тут ничем не спасёшь. Но если юзер соображает, то файл куда легче скопировать через тот же LiveCD, что муторней намного в случае реестра (хотя и возможно). Правда, будут проблемы с правами доступа на NTFS.
Хм.
Взаимоисключающие параграфы? |
| Автор: Akella 25.8.2010, 18:03 | ||
эта папка есть и в общем профиле |
| Автор: Finalist 25.8.2010, 21:08 |
| а почему не хранить данные в локальной базе? Sqlite например... пустую базу(дефолтную) запихнуть в ресурсы, и если нету в корне проги то создать... и после переустановки винды. и, поидее, с флешки будет работать. Если данных мало, или они не сложные, можно в файл писать в папке с екзешником, заксорить потом, или во время записи\чтения. игры так делают.. свой, самый простой вариант шифра. и уже проблематично данные достать... В реестр писать надо только то, что актуально в текущей винде, до переустановки.. да и то, реестр такой жидкий,что вечно в нем какие-то ошибки и глюки.. чистить надо. |
| Автор: Akella 26.8.2010, 09:07 |
| Зачем такие сложности? Добавлено через 28 секунд Ааааа!! Я понял, настоящие герои программисты всегда идут в обход |
| Автор: Finalist 26.8.2010, 09:44 | ||
Человек беспокоится о
а в зашифрованном файле долго разбираться где чьи данные. и я, не думаю, что это сложность) или сложность это sql? стабильный движок работы с данными проще чем писать сериализацию данных. если конечно не использовать совсем простую сериализацию и запись в файл. |
| Автор: drkot 26.8.2010, 11:10 |
он самый Rohoss, пардон, много раз слово юзер упоминалось... переклинило... время то позднее было... да не просто... но с другой стороны вероятность того что их грохнут при переястановке тоже выше, да и подойдут ли они (данные) если просто перезалить на новый профиль. Если не подойдут, то плохо, если подойдут то смысла их шифровать нет... тк любой пользователь сможет их получить. ЗЫЖ при правильно настроеной политике безопасности проблем с утечками практически нет. |
| Автор: Akella 26.8.2010, 15:44 | ||||
Для этого в каждом профиле пользователя свои данные. На крайний случай, если все работают с одной программой и в одном профиле, то можно иметь несколько папок с настройками |
| Автор: Finalist 26.8.2010, 15:53 |
| это уже пусть Rohoss, выбирает как лучше, ему делать)) я просто вариант предложил |
| Автор: CodeMonkey 26.8.2010, 17:51 |
| Я думаю, что за полтора года он успел сделать выбор, не? |
| Автор: Rohoss 27.8.2010, 01:45 | ||
Угу |
| Автор: Motorocker 27.9.2010, 17:31 |
| Проголосовал: Вариант 1 или 2, в зависимости от ситуации Поддерживаю http://forum.vingrad.ru/forum/topic-244127.html#. При таком способе хранения настроек обычные пользователи лишаются проблем, а опытные получают портабельную программу. |