Войти

Показать полную графическую версию : Где создавать ini - в директории с главной программой или в %appdata%?


Страниц : [1] 2

bk99
20-12-2011, 13:11
Вопрос к практикующим "писателям".
Сразу оговорюсь, что программ я не пишу, языками не владею, стандартов не знаю.
Итак, преамбула.
Есть одна Программа (типа текстовый редактор с фенечками), один ехе-шник, настройки хранятся в реестре. Автор Программы решил вынести настройки из реестра в ini, но поместил его (этот ини) сюда:
C:\Documents and Settings\[user]\Application Data\Программа
Мне же кажется, что ини-шник должен лежать в директории с главной программой. Но автор упёрся на своём, и переубедить его я не могу. Посоветуйте, пожалуйста, какие доводы я бы мог привести в свою пользу? Или я всё-таки не прав?
Спасибо.
зы Прошу прощения, если это офтоп...

DedAlex
20-12-2011, 13:28
bk99, правильно автор решил. В Win Vista/7 для записи в ProgramFiles, куда обычно устанавливаются программы, нужны привилегии.

bk99
20-12-2011, 13:45
Программа портабельна, поставляется как один зазипованный ехе-шник (сори, что сразу про это не упомянул).

Drongo
20-12-2011, 22:17
Программа портабельна, поставляется как один зазипованный ехе-шник (сори, что сразу про это не упомянул »Так в этом и есть всё доказательство, что раз портабельная, то должна хранить настройки не зависимо от конфигурации компьютера, т.е. свободно переноситься на флешке. Значит .ini должен лежать возле программы, а на хз где. В этом и есть смысл портабельности и настроек в том числе.

bk99
21-12-2011, 08:38
Ну, "портабельная" - это я так сказал, автор эту Программу не позиционирует как "портабельную". Программа - это один ехе-шник, который может запускаться из любого места (хоть с флешки), а ини файл пишется в АпДата.

Drongo
21-12-2011, 23:23
bk99, уговорите его в настройках программы указать на выбор место сохранение ini-файла или в AppData или в месте с программой, лояльность к пользователям приветствуется всегда. Кому нужно пусть сохраняют в папку с прогой, путь, к ини, пусть хранится также в самом ини. А по умолчанию, пусть создаётся в AppData.

bk99
22-12-2011, 08:00
Drongo, да, так и сделал, жду что скажет...
Спасибо.

Busla
27-12-2011, 09:34
Drongo, bk99, скажет о вас много нелицеприятного - "путь, к ини, пусть хранится также в самом ини" - это гениально, и как его найти?!

Просто проверять наличие рядом с exe-файлом ini-файла, если есть - использовать только его, если нет - искать/создавать в %appdata%.

Drongo
27-12-2011, 12:54
"путь, к ини, пусть хранится также в самом ини" - это гениально, и как его найти?! »С этим я перемудрил, тут каюсь. :laugh:
Просто проверять наличие рядом с exe-файлом ini-файла, если есть - использовать только его, если нет - искать/создавать в %appdata%. »Он же прогер, это и имелось ввиду, не разжёвывать же мысль. :)

El Scorpio
29-12-2011, 03:00
Есть одна Программа (типа текстовый редактор с фенечками), один ехе-шник, настройки хранятся в реестре. Автор Программы решил вынести настройки из реестра в ini, но поместил его (этот ини) сюда:
C:\Documents and Settings\[user]\Application Data\Программа »
Скажу как программист и системный администратор.
Есть такой социальный подвид "Programmist 98" - это человек, который пишет программы так, будто бы все вокруг до сих пор работают в операционной системе Windows 98, которая никак не контролирует и не ограничивает действия программы.

"Programmist 98" никак не задумывается о том, что такие места, как корень диска C:, каталоги Windows и Program files, раздел Local Machine реестра в нормально настроенной системе доступны на запись только программам, запущенным от имени пользователей с полномочиями администратора.
Посему системному администратору, столкнувшемуся с необходимостью использования таких "продуктов", приходится выслеживать, какие же объекты эта ... программа пытается открыть на запись, и указывать эти разрешения в индивидуальном порядке.
К счастью, этот социальный подвид постепенно вытесняется нормальными программистами, которые предусматривают хранение настроек программ и прочих изменяемых объектов в профиле пользователя.

Ну, "портабельная" - это я так сказал, автор эту Программу не позиционирует как "портабельную". Программа - это один ехе-шник, который может запускаться из любого места (хоть с флешки), а ини файл пишется в АпДата. »
Да, если программа в своей работе не требует инсталляции, её можно считать "портабельной".
Однако тогда для запуска не с флэшки её придётся устанавливать вручную, что не очень удобно.

Что могу посоветовать, как программист и сисадмин?
1. Использовать инсталлятор: это позволит не только создать ярлыки на рабочем столе, но и ассоциировать её с нужными файлами (то есть открывать ею файлы по двойному щелчку)
2. Сделать проверку наличия INI-файла в каталоге с программой:
- если файл рядом с программой есть и открывается для записи, значит программа используется в переносной редакции
- если файл отсутствует, значит программа используется в установленной редакции, и нужно хранить параметры в профиле

Любезный
29-12-2011, 17:52
Сам задавался этим вопросом за время программирования.

Решение хранить ини (и не только ини, но и базу данных) в каталоге с программой пригодно ТОЛЬКО для программ, которые разрабатываются для таскания на флэшке или для размещения в каталоге с документами.

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

Что касается настроек. Если вы хотите, чтобы пользователь имел к ним доступ с помощью сторонних приложений, например, с помощью "Блокнота", ини-файл можно разместить в каталоге "Мои документы". Если же настройки будут меняться только самой программой - им путь в специальный каталог, являющийся подкаталогом в одном из каталогов AppData. Причём есть как общий каталог AppData, так и пользовательские. Пользовательский каталог AppData - свой для каждого пользователя Windows. Общие AppData могут меняться только пользователями с привилегиями администратора. Если вы хотите, чтобы простой пользователь мог менять общие настройки, нужно назначить на ваш подкаталог в общих AppData соответствующие права.

Ещё один важный момент. Ни в коем случае не следует жёстко прописывать путь к настройкам в AppData, ибо для разных версий Windows эти пути отличаются. Не следует также искать путь к AppData в реестре - для этого есть специальная функция Windows API shGetFolderPath, которая вернёт этот путь.

vzli_izv
31-12-2011, 14:44
На мой взгляд, программа вообще не должна:
1) ставится на системный диск
2) иметь установщик (максимум что-то типа sfx архива, для удобства распаковки)
3) хранить настройки вне своей папки
4) не работать при переустановке системы

Iska
31-12-2011, 16:32
vzli_izv, это всё хорошо выглядит ровно до тех пор, пока Вам не понадобится сопровождать приложения в корпоративной многопользовательской среде.

vzli_izv
31-12-2011, 19:03
поясните, в чём отличие?

Vadikan
01-01-2012, 12:53
vzli_izv, на мой взгляд, вам категорически нельзя создавать программы с таким подходом :)1) ставится на системный диск
2) иметь установщик (максимум что-то типа sfx архива, для удобства распаковки)
3) хранить настройки вне своей папки
4) не работать при переустановке системы »
Нормальная программа должна быть такой:
1. Программа должна быть вместе с системой (http://www.outsidethebox.ms/13005/#_Toc311983937).

2. Установщик должен проверять права администратора с помощью запроса UAC (http://msdn.microsoft.com/en-us/library/bb756929.aspx).

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

4. Это зависит исключительно от того, требуется ли программе регистрация компонентов/библиотек.

Я не говорю, что всем программам необходимы все эти пункты. Мелким утилитам они вряд ли нужны. Но если вы беретесь за прикладное ПО, то нужно следовать рекомендациям Майкрософт.

vzli_izv
01-01-2012, 23:40
1. Программа должна быть вместе с системой. »
С таким утверждением я не согласен. Хотя бы потому, что для меня такое не приемо.
А вот перенос самой папки Program Files тоже считаю бе3смысленным.

2. Установщик должен проверять права администратора с помощью запроса UAC. »
опять таки, это нужно для администратирования а не частному пользователю.

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

4. Это зависит исключительно от того, требуется ли программе регистрация компонентов/библиотек. »
согласен, но лучше бы не требовалось...

Но если вы беретесь за прикладное ПО, то нужно следовать рекомендациям Майкрософт. »
спорно, так как Майкрософт пытается сделать универсальное для всех. В этом и беда.
И ладно бы была возможность изменять всё под себя простыми способами, но нет.

Пока программисты не поймут, что операционная система должна быть модульного типа (например как FireFox и дополнения к нему) не видать нам качественного продукта.
В идеале ОС должна ставить минимально необходимое и давать простые возможности в установке плагинов её расширяющих.
Скачал dll > установил > получил нужные функции.

Тот, кто первый поймёт данную технологию и её реализует, утрёт нос всем ОС современности.
Андройд в этом плане максимально приблизился к идеалу, от того и такая бешенная популярность.

Для корректировке моих ответов прошу их рассматривать от частного лица, а не сисадмина, корпорации, многопользовательской среды или сетки с 100 ПК.
Частному лицу надо проще, быстрее и желательно под полный контроль.

Vadikan
02-01-2012, 02:11
vzli_izv, принципы, которые я описал, не имеют отношения к корпоративной среде.

Они относятся к:

1. Многопользовательской модели Windows. Я могу привести вам 7 причин использовать отдельные учетные записи для каждого члена семьи (http://www.outsidethebox.ms/11767/).

2. Модели безопасности Windows. Oдним из фундаментальных ee принципов являются уровни целостности (http://www.outsidethebox.ms/12167/). Это я к вопросу о проверке прав администратора для установки программы. Сей тезис явно намекает на то, что не у всех пользователей компьютера должны быть полные права, опять же из соображений безопасности и стабильности работы ОС.

То, что вы пишете (в форуме и в коде), подразумевает "XP и пользователя с правами админа, с чьей учетной записью работают все члены семьи". Вы отстали на 5 с лишним лет, ибо Vista вышла еще в 2006 году.

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

vzli_izv
02-01-2012, 06:08
а я согласен с написанным на все 100%.
На данный момент всё так и есть и это правильно.
Но знаете почему правильно на данный момент? Потому, что других вариантов нету!

Вот 4х местная машина. Она для семьи.
Есть двухместные. Есть мини, есть универсал.
Чувствуете?
Вы не покупаете гараж со всеми машинами по умолчанию. Есть задача - есть предложение.

Windows предлагает сразу сесть на машину, которая размером с фуру + без надобности устанавливает прицеп, без возможности его отцепить. Причём фура как из анекдота - "Доработать напильником".

И да, при каждом переключении скорости ты должен спросить разрешение на действие.
Залезть под капот? Нееет. Система безопасности внутренних агрегатов и узлов под напряжением. Резиновые перчатки дают видимость доступа, но это "какбэ нитак".
Хочется повесить ароматизатор "Йолочка" иль GPS навигатор? Только на станции тех обслуживания.

Но это фсё флуд. Пока ОС делают люди без идей и фантазии, мы будет за ними пытаться доделать.
Это ж надо - 2012 год, а Проводник Windows до сих пор без вкладок (как у браузеров).
Благодарю тех людей, которые создают программы, для возможности минимально приблизить интерфейс к более менее приятному в использовании.

Любезный
02-01-2012, 09:37
Windows предлагает сразу сесть на машину, которая размером с фуру + без надобности устанавливает прицеп, без возможности его отцепить. Причём фура как из анекдота - "Доработать напильником". »

Вы когда-нибудь задумывались о причинах эпидемии вирусов и баннеров на ХР? Думаю, что нет. А зря. Все, кто понял, что отдельная ограниченная учётка в сочетании с самым простым антивирусом позволяют закрыться от этой дряни, уже давно создали себе одну или несколько таких учёток для себя и членов своей семьи.

Тот, кто первый поймёт данную технологию и её реализует, утрёт нос всем ОС современности.
Андройд в этом плане максимально приблизился к идеалу, от того и такая бешенная популярность. »

Андроид является персональной системой на единственного пользователя, в отличие от винды. Для неё такое поведение - вполне приемлемо. А про бешеную популярность - не смешите, ибо компьютеров с андроидом - единицы. Почему? Да потому что в андроиде не реализованы другие востребованные технологии - например, доступ к принтеру и установка драйверов к добавляемым новым устройствам. Мне, например, не нужен планшет, с которого я не могу, например, отправить документ на печать. И не только мне.

Кстати, реализовать работу с драйверами устройств мешает модель безопасности системы, которая закрывает пользователю доступ к руту.

Vadikan
02-01-2012, 12:39
Это ж надо - 2012 год, а Проводник Windows до сих пор без вкладок (как у браузеров). »
Ну так и учитесь у тех людей, которые пишут файловые менеджеры со вкладками :)

http://tools.oszone.net/Vadikan/img/tc-install.jpg

Обратите внимание, что это диалог с дополнительными настройками, а флажки и радиокнопки отражают стандартные параметры установки.




© OSzone.net 2001-2012