Программа на С# (но в принципе это не столь важно), до этого использовал стандартный app.config, быстро удобно, но его возможностей стало не хватать. Во первых параметров стало много: сохранение состояний всех окон, некоторых контролов, настройки самой программы, настройки подключения к серверу, которые надо шифровать ну и т.д. В общем решил написать свой велосипед, теперь думаю где это все хранить, и соответственно как реализовать.
На данный момент склоняюсь к созданию своего класса настроек и его бинарной сериализацией, но вот вопрос, где его хранить? Не хотелось бы его держать в папке с программой, и для каждого пользователя иметь отдельные настройки.
Самая большая тупость разработчика — хранить настройки в одной папке с программой. msdn.microsoft.com/ru-ru/library/system.environment.specialfolder.aspx
Хранить настройки надо либо здесь Environment.SpecialFolder.ApplicationData либо здесь Environment.SpecialFolder.LocalApplicationData
Эквиваленты в привычном виде вроде:
c:\Users\\AppData\Roaming\ и
c:\Users\\AppData\Local\
А где их хранить на WM коммуникаторе? Организация в принципе та же, но по моему на коммуникаторе как раз в папке с программой даже лучше, т к обычно их ставят на карточку, а при удалении папка не удаляется вся, а только те файлы, которые были установлены, т е если создать файл настроек ручками при первом запуске, то при удалении программы стандартными средствами(а не втупую убить папку), настройки останутся на месте.
Если че, я ПХП разработчик и не вкурсе что там и как с комуникаторами =) Но мне кажется там есть аналогичные пользовательские папки. Я имел ввиду декстоп и винду. В никсовых системах тоже есть отдельная папка с настройками, это вполне хорошая практика хранить свои данные там где надо а не где хочется.
@taliban, Простите, а в двух словах не объясните, почему это «большая тупость». Меня всегда удивляло, почему это программа должна «расползаться» по системе. Сейчас программы должны двигаться в сторону портативности (конечно же, в силу возможности). Раз выгрузил все нужные файлы куда то на носитель, и вот уже любимая программа всегда с тобой, да еще и с настройками. Переустанивил систему — любимая программа, бережно настроенная Тобой, сразу готова к запуску;) Я, конечно, понимаю проблему многопользовательской системы, но мы должны идти "от одного ко многим", вместо "от многих к одоному". Xотя, возможно, я и ошибаюсь.
@tenbits Потому что я могу поставить программу от админа в папку в которую не будет записи от другого пользователя, и было бы неплохо чтоб она продолжала работать нормально.
Как пример — установка программы в program files происходит из под админа, а работа нет.
Скажу короче — для разграничения прав пользователей, хранить нужно в локальной папке юзера. В том же линуксе, аналог AppData это home, и никто, вроде бы, не жаловался ещё.
Потому что каталог с программой — только для чтения для обычных пользовтелей (не-администраторов). Почему? Потому что операционная система многопользовательская. Точно также как и /usr/bin в *nix. Другой вопрос что в *nix разработчики следуют рекомендациям, а в windows обычно наблюдаем отношение разработчиков в стиле «о, хоть так работает!»
А что мешает написать свои сериализуемые классы для хранения настроек и добавить их в тот же app.config? ИМХО, свои велосипеды изобретать в таких вещах не стоит, лучше использовать стандартные средства. А то получится как всегда: понаписали программ, постоянно пишущих что-то в Program Files, пришли на семерку — а там оно не работает. Вы уверены, что в винде-восьмерке, например, данные будут храниться там же и так же, как и в семерке?
Если следовать гайдлайнсам системы, думаю все будет в порядке. На данный момент решил сделать так: программа смотрит в папке с ехешником файл настроек и если он есть, и есть доступ на запись юзает его, если доступа на запись нет, или файл отсутствует, то создает дефолтный конфиг в AppData и юзает его. Такой же подход применяется например в uTorrent, это позволяет хранить как отдельные настройки для каждого пользователя, так и при желании сделать настройки общими а программу портативной.