Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
ВнизКак и где правильно хранить настройки и изменяемые файлы программ Найти похожие ветки
← →
Baks (2012-02-09 13:04) [0]При первом запуске моя программа установленная в папке Program Files, создаёт файл настроек и перезаписывает его когда пользователь изменяет настройки в программе. В XP с правами администратора всё работает. В XP из под уч.записи пользователя с ограниченными правами система уже не даёт перезаписать файл. А Win 7, вообще создала
папку в C:\Users\Ivan\AppData\Local\VirtualStore\Program Files x86\MyProgName и поместила туда файл настроек моей программы. Интересно, что программа его там находит и всё работает как надо.
Но я хочу спросить, правильно ли это? Где и как правильно хранить настройки и изменяемые файлы программы?
1) в папке программы, как я описал
2) в реестре
3) в папке Документы, как это делают игры
Или как-то ещё?
← →
БарЛог © (2012-02-09 13:09) [1]Если ты хранишь в Program files, то настроек один файл - все настройки одинаковы для всех пользователей компьютера.
Если хранишь в Documents&Settings (Users) - то у каждого свои настройки.
Вполне можно и в реестре.
← →
Anatoly Podgoretsky © (2012-02-09 13:18) [2]> Baks (09.02.2012 13:04:00) [0]
А нафига ты пишешь в Program File, уже десять лет туда писать нельзя
← →
Anatoly Podgoretsky © (2012-02-09 13:19) [3]> БарЛог (09.02.2012 13:09:01) [1]
Странно, но есть такой пользователь как All Users
← →
Baks (2012-02-09 13:34) [4]
> А нафига ты пишешь в Program File, уже десять лет туда писать нельзя
Отстал от жизни. Вот по этому и спрашиваю, где правильно всё это хранить?
← →
Dimka Maslov © (2012-02-09 13:48) [5]1. В реестре (ветка HKCU)
2. В профиле пользователя (папка получаемая через SHGetSpecialFolderPath c ID = CSIDL_APPDATA или CSIDL_LOCAL_APPDATA)
← →
Baks (2012-02-09 14:04) [6]А где лучше? В Реестре или в AppData? Наверно в AppData удобней?
← →
Dimka Maslov © (2012-02-09 14:15) [7]Смотря для чего.
Если например, пользователь будет работать из перемещаемого профиля, то надо использовать только AppData, чтобы данные перемещались вместе с пользователем. А если строго не хотим, чтобы перемещались - тогда в Local AppData.
Реестр - механизм устаревающий и многие глюки и тормоза возникают именно из-за него. Но в нём уже сразу всё структурировано и есть готовый механизм доступа, а при записи конфигурации в AppData за структурой, форматом данных, и вводом-выводом надо следить самостоятельно.
← →
Baks (2012-02-09 14:27) [8]Сейчас моя программа работает на Linux из под Wine. А если я буду использовать AppData, будет работать?
← →
Anatoly Podgoretsky © (2012-02-09 14:30) [9]> Baks (09.02.2012 14:04:06) [6]
Что лучше Марс или Сникерс, конечно Байнти, почему? Да райское наслаждение.
← →
Baks (2012-02-09 14:38) [10]
> Anatoly Podgoretsky © (09.02.12 14:30) [9]
Лучше выяснить, чем остаться с "Чупа Чупс" :)
← →
CRLF (2012-02-09 14:55) [11]
> в нём уже сразу всё структурировано и есть готовый механизм
> доступа, а при записи конфигурации в AppData за структурой,
> форматом данных, и вводом-выводом надо следить самостоятельно
Так у него и так уже всё в файлах хранится. Смысл в реестр лезть?
← →
Dimka Maslov © (2012-02-09 15:28) [12]
> Сейчас моя программа работает на Linux из под Wine. А если
> я буду использовать AppData, будет работать?
А запустить и попробовать уже не канает?
← →
Baks (2012-02-09 15:35) [13]
> А запустить и попробовать уже не канает?
У меня нет Linux. Сам никогда не пробовал, просто знаю от пользователей, что идёт.
Вот ещё интересно про отличие между папками Мои документы и Application Data:
http://www.transl-gunsmoker.ru/2010/07/application-data.html
← →
БарЛог © (2012-02-09 15:40) [14]Anatoly Podgoretsky © (09.02.12 13:18) [2]
> Странно, но есть такой пользователь как All Users
Да знаю я. Но если хочется в папку программы... :)
← →
Anatoly Podgoretsky © (2012-02-09 15:40) [15]То есть у тебя даже Линукса нет, ты что будешь втюхивать пользователям лохотрон
← →
Baks (2012-02-09 15:47) [16]
> То есть у тебя даже Линукса нет, ты что будешь втюхивать
> пользователям лохотрон
Я не пишу, что идёт на Linux. Пишу, что для Windows. Но надеюсь, что и в Linux пойдёт, если кто будет пытаться.
← →
Anatoly Podgoretsky © (2012-02-09 16:03) [17]> БарЛог (09.02.2012 15:40:14) [14]
Хочется - перехочется
← →
TUser © (2012-02-10 01:02) [18]
> А Win 7, вообще создала
> папку в C:\Users\Ivan\AppData\Local\VirtualStore\Program
> Files x86\MyProgName и поместила туда файл настроек моей
> программы. Интересно, что программа его там находит и всё
> работает как надо.
Это МС пожалел горе-программистов, которые пишут в Program files. На правильно настроенной машине обычному пользователю туда писать низя, ибо вирусы и ваще. Поэтому программы должны хранить свой мусор в папке, доступной конкретному пользователю.
Но в мире так много недопрограммистов, что МС плюнула их всех обучать, и сделала фичу - если чья-то недопрограмма лезет писать, куда не следует, то запись производится в свое локальное место, а система делает так, что недопрограмма видит свой мусор в своей недопапке. Кажется, в висте появилось.
← →
Inovet © (2012-02-10 09:06) [19]> [1] БарЛог © (09.02.12 13:09)
> Если ты хранишь в Program files
Нельзя там хранить. Вин 7 для таких упёртыых программистов и делает папку в VirtualStore но из любви к пользователям этих программ, а не к программистам их писавших. ДрВеб отучилс яписать в свою папку с прогшраммой только в последних версиях, да и ещё много кто.
← →
Anatoly Podgoretsky © (2012-02-10 10:29) [20]> TUser (10.02.2012 01:02:18) [18]
Ну плюнула, зато теперь они не могут найти свои данные и программу.
← →
Inovet © (2012-02-10 12:08) [21]> [20] Anatoly Podgoretsky © (10.02.12 10:29)
> Ну плюнула, зато теперь они не могут найти свои данные и программу.
ДМКлиент какой-то из предпоследних версий тоже писал как-то так. Так я на Вин7 наблюдал странности - файлы хранились в двух местах в одном бОльшая часть базы а свежие сообщения и темы в другом, и перемещались со временем в основную. Сейчас во втором вижу только Outgoing.
← →
Anatoly Podgoretsky © (2012-02-10 12:15) [22]> Inovet (10.02.2012 12:08:21) [21]
Если ты про позравления, то это совсем старая программа, трудно от нее
требовать соответствия требованием W7
Но ее можно изменить, и разместить базу в другом месте.
← →
Inovet © (2012-02-10 12:32) [23]> [22] Anatoly Podgoretsky © (10.02.12 12:15)
> Но ее можно изменить, и разместить базу в другом месте.
Я про клиент этого форума
http://www.ksoftware.ru/wiki/doku.php/dmclient
Так в последей версии при инсталяции сделана возможность выбора места для базы.
← →
Anatoly Podgoretsky © (2012-02-10 12:54) [24]> Inovet (10.02.2012 12:32:23) [23]
Ну не важно, главное сделана возможность указания места. Если больше никакой
запись PF то этого достаточно.
← →
DVM © (2012-02-10 16:35) [25]
> Baks (09.02.12 13:04)
Хранить надо в
CSIDL_LOCAL_APPDATA или по новому в
FOLDERID_LocalAppData: TKnownFolderID = "{F1B32785-6FBA-4FCF-9D55-7B8E7F157091}";
И не надо морочить никому и себе голову мыслью о том где находится эта папка. В программе если очень хочется предусмотреть экспорт и импорт настроек и данных оттуда.
← →
DVM © (2012-02-10 16:36) [26]Для данных, которые потенциально могут иметь значительный размер (базы данных например) предусмотреть возможность смены места хранения их.
← →
Baks (2012-02-11 23:29) [27]У меня вместе с программой устанавливаются файлы данных, которые можно изменить с помощью прилагаемого редактора. И эти изменяемые файлы программы я думая правильно разместить в CSIDL_COMMON_APPDATA.
А файлы настроек в CSIDL_APPDATA т.к. их можно переносить, и у каждого пользователя будут свои. Что скажете?
Подскажите ещё, функция SHGetSpecialFolderPath с параметром CSIDL_APPDATA и CSIDL_COMMON_APPDATA сработает на Win 98?
← →
Германн © (2012-02-12 00:13) [28]
> Подскажите ещё, функция SHGetSpecialFolderPath с параметром
> CSIDL_APPDATA и CSIDL_COMMON_APPDATA сработает на Win 98?
>
>
Если верить справке она сработает даже в Win95
← →
Baks (2012-02-12 21:55) [29]Я имею ввиду не саму функцию, а именно с данными параметрами. Имеется ввиду, есть ли в этой системе такие папки (CSIDL_APPDATA и CSIDL_COMMON_APPDATA). Написано, что не все параметры данной функции применимы на различных системах.
← →
DVM © (2012-02-12 22:08) [30]
> Если верить справке она сработает даже в Win95
Че то в MSDN противоречие наблюдается.
SHGetSpecialFolderPath
Requirements
Minimum supported client
Windows 2000 Professional, Windows XP
Minimum supported server
Windows 2000 Server
Header
Shlobj.h
Library
Shell32.lib
DLL
Shell32.dll (version 4.71 or later)
http://msdn.microsoft.com/en-us/library/windows/desktop/bb762204(v=vs.85).aspx
> Я имею ввиду не саму функцию, а именно с данными параметрами.
> Имеется ввиду, есть ли в этой системе такие папки (CSIDL_APPDATA
> и CSIDL_COMMON_APPDATA).
CSIDL_APPDATA
FOLDERID_RoamingAppData
Version 4.71. The file system directory that serves as a common repository for application-specific data. A typical path is C:\Documents and Settings\username\Application Data. This CSIDL is supported by the redistributable Shfolder.dll for systems that do not have the Microsoft Internet Explorer 4.0 integrated Shell installed.
http://msdn.microsoft.com/en-us/library/windows/desktop/bb762494(v=vs.85).aspx
Shell and Shlwapi DLL Versions
Shell32.dll
Version Distribution Platform
4.0 Windows 95 and Microsoft Windows NT 4.0
4.71 Microsoft Internet Explorer 4.0. See note 1.
4.72 Microsoft Internet Explorer 4.01 and Windows 98. See note 1.
http://msdn.microsoft.com/en-us/library/windows/desktop/bb776779(v=vs.85).aspx
← →
Сусл_ (2012-02-13 00:01) [31]я храню в Application Data в Documents And Settings.
поищи - в винде есть функции возвращающие путь до этого каталога для различных версий винды. на память не помню. чот типа этого www.foger.net/%D0%BA%D0%B0%D0%BA-%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D1%82%D1%8C-%D0%BF%D1%83%D1%82%D1%8C-%D0%BA-%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%BD%D1%8B%D0%BC-%D0%BF%D0%B0%D0%BF%D0%BA%D0%B0%D0%BC.html
← →
Inovet © (2012-02-13 09:43) [32]> [30] DVM © (12.02.12 22:08)
> Че то в MSDN противоречие наблюдается.
Там много где такое встречается. Как будто в одних статьях убрали упоминание систем ниже Вин2000, а в других забыли.
← →
Anatoly Podgoretsky © (2012-02-13 09:54) [33]> Inovet (13.02.2012 09:43:32) [32]
Не как будто, а именно так и есть. Ну если по MSDN простительно, все таки
гигантский размер, то вот Borland непростительно.
← →
Dimka Maslov © (2012-02-13 10:05) [34]
> сработает на Win 98
Ты бы ещё Windows 3.11 вспомнил с расширением Win32S.
← →
QAZ (2012-02-13 11:38) [35]Удалено модератором
← →
CRLF (2012-02-13 13:08) [36]Удалено модератором
← →
Baks (2012-02-13 15:14) [37]Использую InnoSetup:
[Setup]
DefaultDirName={pf}\MyProg
[Dirs]
Name: "{commonappdata}\MyProg\EditableData"
Как быть с именем папки программы в {commonappdata}\MyProg\, если пользователь изменит имя DefaultDirName={pf}\MyProg в диалоге перед установкой? Обязательно ли эти имена должны совпадать? Или это не имеет значения, например в {pf}\MyProgChanged, а в {commonappdata} останется прежнее MyProg? Или всё-таки лучше получить новое имя папки из {app}?
← →
CRLF (2012-02-13 15:27) [38]
> Обязательно ли эти имена должны совпадать? Или это не имеет
> значения, например в {pf}\MyProgChanged, а в {commonappdata}
> останется прежнее MyProg?
А как программа определяет путь к своим настройкам внутри AppData?
← →
Baks (2012-02-13 19:45) [39]
> А как программа определяет путь к своим настройкам внутри AppData?
Да, тогда пожалуй менять не нужно.
← →
Baks (2012-02-17 22:48) [40]Во время установки копирую некоторые файлы в CSIDL_COMMON_APPDATA \MyProg, которые впоследствии могут быть отредактированы (в том числе и удалены) любым пользователем. Но получается так, что полные права на эти файлы пренадлежат не всем, и другие пользователи не могут их удалить из моей программы. Подскажите, как лучше сделать? Стоит ли во время установки (InnoSetup) указать для этих файлов Permissions: users-full (users-modify) или лучше этого не делать?
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.056 c