Универсальный подход для хранения настроек типа INI и / или файлов БД на различных машинах Windows - PullRequest
3 голосов
/ 28 марта 2009

Ладно, сначала истинное признание: Может быть, это только я, но иногда «лучшие практики для настройки программ» на компьютерах с Windows чувствуются, как будто они изменились больше, чем стратегии доступа Microsoft к данным. Я все еще использую XP, и где-то по пути просто «застыл» из-за того, где MS хотела, чтобы я хранил все данные моего приложения и т. Д. Я контролировал все машины, для которых я кодировал, так что это действительно не имело значения.

Сейчас я пишу приложения для «в дикой природе», поддерживающие Win98SE и выше. Я должен обратить внимание на все это снова. : - \

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

По сути, мне нужно сохранить настройки приложения (например, запоминание настроек опций и т. Д.).

Я прочитал: Реестр и INI-файл для хранения настраиваемых пользователем настроек приложения
Где хранить настройки программы вместо HKEY_LOCAL_MACHINE?
Где моя программа win32 должна хранить свои файлы?
Лучшее место для хранения файлов конфигурации и файлов журналов в Windows для моей программы?

... так что, по крайней мере, я не одинок в этом вопросе ...; )
(с извинениями за что-то вроде повторяющегося вопроса, хотя и с несколько иной точки зрения).

Звучит так, будто я могу просто использовать% APPDATA% / MyProgram и хранить там все данные, НО Это УНИВЕРСАЛЬНО ИСТИННО для всех версий Windows от Win98SE и выше? Если нет, каков наилучший подход и когда он появился?

Честно говоря, то, что я действительно ищу, - это самый простой способ решить эту проблему - я просто хочу один (если возможно), простой, легкий и надежный способ получить «Папку данных моей программы» в любом и все случаи. Достигнет ли вышесказанное этого?

Ответы [ 5 ]

5 голосов
/ 28 марта 2009

Перейдите к Создание Delphi-программ для Vista-Ready и прокрутите вниз до «Где хранить данные приложения?»

function GetRoamingUserAppDataPath: string; // работает, пока у людей есть хотя бы IE 4. (и Win95 или лучше)

3 голосов
/ 28 марта 2009

% APPDATA%, по-видимому, отсутствует на Win95. Я бы использовал SHGetSpecialFolderPath , который доступен на Win98 или Win95 с IE4.

2 голосов
/ 28 марта 2009

Ответы, которые вы получили до сих пор, хороши, однако я думаю, что вы смешиваете в своем вопросе вещи, которые не связаны друг с другом, поэтому невозможно полностью ответить на ваш вопрос.

В заголовке вашего вопроса указано

Настройки типа INI и / или файлы БД

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

Первая категория проста, используйте подходящий каталог в одной из папок CSIDL_APPDATA или CSIDL_PERSONAL .

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

Последняя категория, однако, является сложной, поскольку во всех установках Windows просто нет каталога, который можно считать доступным для записи для всех пользователей. Особенно в бизнес-настройках с заблокированными учетными записями пользователей может случиться так, что у пользователя вообще нет прав на запись для локального диска, только в его пользовательский каталог где-то на сервере в сети. Таким образом, не существует единственного простого способа получить это местоположение данных для вашей программы и быть уверенным, что оно будет работать - это то, что вам, возможно, придется пересмотреть для всех программ и всех вариантов использования заново.

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

Один из советов, которые я бы дал, - это отойти от файлов базы данных в стиле рабочего стола, таких как Paradox или Access, для приложений, которым нужно обмениваться данными между пользователями на машине. Только на реальных (локальных) серверах баз данных вы сможете хранить многопользовательские данные на заблокированных учетных записях / машинах.

0 голосов
/ 28 марта 2009

Я склонен использовать XML-файлы в% APPDATA% для хранения своих настроек. Только на самом деле, потому что XML проще, чем ini для C #. В любом случае,% APPDATA% кажется безопасной ставкой.

Я не могу сообщить, поддерживает ли 98SE это.

0 голосов
/ 28 марта 2009

Я не могу комментировать, работает ли он на всех версиях, но я, безусловно, согласен с тем, что файлы .ini - правильный ответ. Когда XP сказал использовать реестр, я попробовал - для одной программы. Внутреннее развертывание показало, что параметры необходимо скопировать с компьютера на компьютер - следующее обновление вернулось к файлам .ini.

Я думаю, что весь реестр был их мерой по борьбе с пиратством, которую они хотели скрыть как лучшую практику.

...