Теория - Где создавать ini - в директории с главной программой или в %appdata%?
-
bk99
Теория - Где создавать ini - в директории с главной программой или в %appdata%?
Вопрос к практикующим "писателям".
Сразу оговорюсь, что программ я не пишу, языками не владею, стандартов не знаю.
Итак, преамбула.
Есть одна Программа (типа текстовый редактор с фенечками), один ехе-шник, настройки хранятся в реестре. Автор Программы решил вынести настройки из реестра в ini, но поместил его (этот ини) сюда:
C:\Documents and Settings\[user]\Application Data\Программа
Мне же кажется, что ини-шник должен лежать в директории с главной программой. Но автор упёрся на своём, и переубедить его я не могу. Посоветуйте, пожалуйста, какие доводы я бы мог привести в свою пользу? Или я всё-таки не прав?
Спасибо.
зы Прошу прощения, если это офтоп...
Сразу оговорюсь, что программ я не пишу, языками не владею, стандартов не знаю.
Итак, преамбула.
Есть одна Программа (типа текстовый редактор с фенечками), один ехе-шник, настройки хранятся в реестре. Автор Программы решил вынести настройки из реестра в ini, но поместил его (этот ини) сюда:
C:\Documents and Settings\[user]\Application Data\Программа
Мне же кажется, что ини-шник должен лежать в директории с главной программой. Но автор упёрся на своём, и переубедить его я не могу. Посоветуйте, пожалуйста, какие доводы я бы мог привести в свою пользу? Или я всё-таки не прав?
Спасибо.
зы Прошу прощения, если это офтоп...
-
DedAlex
Re: Теория - Где создавать ini - в директории с главной программой или в %appdata%?
bk99, правильно автор решил. В Win Vista/7 для записи в ProgramFiles, куда обычно устанавливаются программы, нужны привилегии.
-
Любезный
Re: Теория - Где создавать ini - в директории с главной программой или в %appdata%?
Сам задавался этим вопросом за время программирования.
Решение хранить ини (и не только ини, но и базу данных) в каталоге с программой пригодно ТОЛЬКО для программ, которые разрабатываются для таскания на флэшке или для размещения в каталоге с документами.
В Program Files нужно размещать файлы программы, которые будут изменяться только по праздникам (exe, справка и.т.п).
Что касается настроек. Если вы хотите, чтобы пользователь имел к ним доступ с помощью сторонних приложений, например, с помощью "Блокнота", ини-файл можно разместить в каталоге "Мои документы". Если же настройки будут меняться только самой программой - им путь в специальный каталог, являющийся подкаталогом в одном из каталогов AppData. Причём есть как общий каталог AppData, так и пользовательские. Пользовательский каталог AppData - свой для каждого пользователя Windows. Общие AppData могут меняться только пользователями с привилегиями администратора. Если вы хотите, чтобы простой пользователь мог менять общие настройки, нужно назначить на ваш подкаталог в общих AppData соответствующие права.
Ещё один важный момент. Ни в коем случае не следует жёстко прописывать путь к настройкам в AppData, ибо для разных версий Windows эти пути отличаются. Не следует также искать путь к AppData в реестре - для этого есть специальная функция Windows API shGetFolderPath, которая вернёт этот путь.
Решение хранить ини (и не только ини, но и базу данных) в каталоге с программой пригодно ТОЛЬКО для программ, которые разрабатываются для таскания на флэшке или для размещения в каталоге с документами.
В Program Files нужно размещать файлы программы, которые будут изменяться только по праздникам (exe, справка и.т.п).
Что касается настроек. Если вы хотите, чтобы пользователь имел к ним доступ с помощью сторонних приложений, например, с помощью "Блокнота", ини-файл можно разместить в каталоге "Мои документы". Если же настройки будут меняться только самой программой - им путь в специальный каталог, являющийся подкаталогом в одном из каталогов AppData. Причём есть как общий каталог AppData, так и пользовательские. Пользовательский каталог AppData - свой для каждого пользователя Windows. Общие AppData могут меняться только пользователями с привилегиями администратора. Если вы хотите, чтобы простой пользователь мог менять общие настройки, нужно назначить на ваш подкаталог в общих AppData соответствующие права.
Ещё один важный момент. Ни в коем случае не следует жёстко прописывать путь к настройкам в AppData, ибо для разных версий Windows эти пути отличаются. Не следует также искать путь к AppData в реестре - для этого есть специальная функция Windows API shGetFolderPath, которая вернёт этот путь.
-
yurfed
Re: Теория - Где создавать ini - в директории с главной программой или в %appdata%?
Цитата bk99:
Программа портабельна, поставляется как один зазипованный ехе-шник (сори, что сразу про это не упомянул
Так в этом и есть всё доказательство, что раз портабельная, то должна хранить настройки не зависимо от конфигурации компьютера, т.е. свободно переноситься на флешке. Значит .ini должен лежать возле программы, а на хз где. В этом и есть смысл портабельности и настроек в том числе.
Программа портабельна, поставляется как один зазипованный ехе-шник (сори, что сразу про это не упомянул
Теория - Где создавать ini - в директории с главной программой или в %appdata%?
Так в этом и есть всё доказательство, что раз портабельная, то должна хранить настройки не зависимо от конфигурации компьютера, т.е. свободно переноситься на флешке. Значит .ini должен лежать возле программы, а на хз где. В этом и есть смысл портабельности и настроек в том числе.
-
Iska
Re: Теория - Где создавать ini - в директории с главной программой или в %appdata%?
Ну, "портабельная" - это я так сказал, автор эту Программу не позиционирует как "портабельную". Программа - это один ехе-шник, который может запускаться из любого места (хоть с флешки), а ини файл пишется в АпДата.
-
DedAlex
Re: Теория - Где создавать ini - в директории с главной программой или в %appdata%?
Программа портабельна, поставляется как один зазипованный ехе-шник (сори, что сразу про это не упомянул).
-
Drongo
Re: Теория - Где создавать ini - в директории с главной программой или в %appdata%?
Drongo, да, так и сделал, жду что скажет...
Спасибо.
Спасибо.
-
bk99
Re: Теория - Где создавать ini - в директории с главной программой или в %appdata%?
Ну, "портабельная" - это я так сказал, автор эту Программу не позиционирует как "портабельную". Программа - это один ехе-шник, который может запускаться из любого места (хоть с флешки), а ини файл пишется в АпДата.
-
Drongo
Re: Теория - Где создавать ini - в директории с главной программой или в %appdata%?
Цитата Busla:
"путь, к ини, пусть хранится также в самом ини" - это гениально, и как его найти?!
С этим я перемудрил, тут каюсь.
Цитата Busla:
Просто проверять наличие рядом с exe-файлом ini-файла, если есть - использовать только его, если нет - искать/создавать в %appdata%.
Он же прогер, это и имелось ввиду, не разжёвывать же мысль.
"путь, к ини, пусть хранится также в самом ини" - это гениально, и как его найти?!
Теория - Где создавать ini - в директории с главной программой или в %appdata%?
С этим я перемудрил, тут каюсь.

Цитата Busla:
Просто проверять наличие рядом с exe-файлом ini-файла, если есть - использовать только его, если нет - искать/создавать в %appdata%.
Теория - Где создавать ini - в директории с главной программой или в %appdata%?
Он же прогер, это и имелось ввиду, не разжёвывать же мысль.

-
bk99
Re: Теория - Где создавать ini - в директории с главной программой или в %appdata%?
Цитата bk99:
Есть одна Программа (типа текстовый редактор с фенечками), один ехе-шник, настройки хранятся в реестре. Автор Программы решил вынести настройки из реестра в ini, но поместил его (этот ини) сюда:
C:\Documents and Settings\[user]\Application Data\Программа
Скажу как программист и системный администратор.
Есть такой социальный подвид "Programmist 98" - это человек, который пишет программы так, будто бы все вокруг до сих пор работают в операционной системе Windows 98, которая никак не контролирует и не ограничивает действия программы.
"Programmist 98" никак не задумывается о том, что такие места, как корень диска C:, каталоги Windows и Program files, раздел Local Machine реестра в нормально настроенной системе доступны на запись только программам, запущенным от имени пользователей с полномочиями администратора.
Посему системному администратору, столкнувшемуся с необходимостью использования таких "продуктов", приходится выслеживать, какие же объекты эта ... программа пытается открыть на запись, и указывать эти разрешения в индивидуальном порядке.
К счастью, этот социальный подвид постепенно вытесняется нормальными программистами, которые предусматривают хранение настроек программ и прочих изменяемых объектов в профиле пользователя.
Цитата bk99:
Ну, "портабельная" - это я так сказал, автор эту Программу не позиционирует как "портабельную". Программа - это один ехе-шник, который может запускаться из любого места (хоть с флешки), а ини файл пишется в АпДата.
Да, если программа в своей работе не требует инсталляции, её можно считать "портабельной".
Однако тогда для запуска не с флэшки её придётся устанавливать вручную, что не очень удобно.
Что могу посоветовать, как программист и сисадмин?
1. Использовать инсталлятор: это позволит не только создать ярлыки на рабочем столе, но и ассоциировать её с нужными файлами (то есть открывать ею файлы по двойному щелчку)
2. Сделать проверку наличия INI-файла в каталоге с программой:
- если файл рядом с программой есть и открывается для записи, значит программа используется в переносной редакции
- если файл отсутствует, значит программа используется в установленной редакции, и нужно хранить параметры в профиле
Есть одна Программа (типа текстовый редактор с фенечками), один ехе-шник, настройки хранятся в реестре. Автор Программы решил вынести настройки из реестра в ini, но поместил его (этот ини) сюда:
C:\Documents and Settings\[user]\Application Data\Программа
Теория - Где создавать ini - в директории с главной программой или в %appdata%?
Скажу как программист и системный администратор.
Есть такой социальный подвид "Programmist 98" - это человек, который пишет программы так, будто бы все вокруг до сих пор работают в операционной системе Windows 98, которая никак не контролирует и не ограничивает действия программы.
"Programmist 98" никак не задумывается о том, что такие места, как корень диска C:, каталоги Windows и Program files, раздел Local Machine реестра в нормально настроенной системе доступны на запись только программам, запущенным от имени пользователей с полномочиями администратора.
Посему системному администратору, столкнувшемуся с необходимостью использования таких "продуктов", приходится выслеживать, какие же объекты эта ... программа пытается открыть на запись, и указывать эти разрешения в индивидуальном порядке.
К счастью, этот социальный подвид постепенно вытесняется нормальными программистами, которые предусматривают хранение настроек программ и прочих изменяемых объектов в профиле пользователя.
Цитата bk99:
Ну, "портабельная" - это я так сказал, автор эту Программу не позиционирует как "портабельную". Программа - это один ехе-шник, который может запускаться из любого места (хоть с флешки), а ини файл пишется в АпДата.
Теория - Где создавать ini - в директории с главной программой или в %appdata%?
Да, если программа в своей работе не требует инсталляции, её можно считать "портабельной".
Однако тогда для запуска не с флэшки её придётся устанавливать вручную, что не очень удобно.
Что могу посоветовать, как программист и сисадмин?
1. Использовать инсталлятор: это позволит не только создать ярлыки на рабочем столе, но и ассоциировать её с нужными файлами (то есть открывать ею файлы по двойному щелчку)
2. Сделать проверку наличия INI-файла в каталоге с программой:
- если файл рядом с программой есть и открывается для записи, значит программа используется в переносной редакции
- если файл отсутствует, значит программа используется в установленной редакции, и нужно хранить параметры в профиле