-
Думаю, большинство знает, что MS рекомендует (а с вводом висты получается сильно настаивает) в NT системах настройки хранить или в реестре, или в специальном каталоге, путь к которому можно получить через комманды shell (я уж точно не помню сейчас, не суть важно). Почему - тоже понятно, не обсуждается.
Но вот есть у нас программа-сервис, все давно привыкли, что настройки хранятся в каталоге, куда программа установлена. И настройщики, и пользователи.
И хотя в подавляющем большинстве случаев программа запускается как сервис, но, конечно, нужно и предусмотреть возможность запускаться в виде GUI-приложения (поддерживается и совместимость с win9x). В реестре хранить плохо из-за специфики, пользователи часто присылают нам файл настроек, описывают ситуацию, мы настраиваем под них и отсылаем файл настроек обратно, гораздо проще тут работать с файлом.
Я вижу какие варианты всего этого:
1) хранить все настройки только по пути, которые выдает windows... Плохо тем, что нужно теперь пользователям объяснять где хранится фал настроек. Тем более, в разных NT немного по разному.
Плюс недостаток в том, что будучи запущена от разных пользователей - у программы будут каждый раз новые настройки. Но по самой сути программы - не может быть несколько ее экземпляров на компьютере, то что для обычных программ правильно, для нее наоборот - неверно. Не нужна там поддержка мультипользовательских настроек.
2) для NT-систем ниже Vista - хранить настройки в директории с программой. Для Vista хранить по полученному от ОС пути.
Этот способ мне не нравится - как-то хаотично, неоднозначно, непонятно со стороны.
3) хранить настройки в директории с программой, как и сейчас. Но по-умолчанию, ставить программу не в Program Files, а в другое место. А тот кто поставил в PF - пусть сам разбирается, его проблемы, пусть выдает нужные права. Этот способ наиболее мне симпатичен наравне с первым. Так вроде, например, WinGate делает... Критика?
4) хранить настройки в папке "Мои документы". Это аналог первого способа, так частенько делают игры. Но тут я не очень понимаю, почему многие программы хранят в "Мои документы", если по идее MS рекомендует хранить в том пути, который обычно ведет в Application Data? Чем мои документы лучше или какова политика?
Кто что думает по этому поводу вообще, может кто сталкивался с аналогичными ситуациями, что делал?
P.S. Только не надо мне рассказывать про GUI и что рекомендации MS - аксиома. Я перечислил свое видение достоинств и недостатков каждого способа. Давайте обсудим.
-
P.S.S. Параллельно вопросик, сейчас проверять просто неудобно, а вопрос сформировался - какой путь хранения настроек выдаст NT-система, когда об этом запрашивает сервис? Для юзверей-сеансов она выдает в "Application Data" насколько я помню, а для сервиса?!
-
> Добежал (18.12.2008 17:17:00) [0]
Зачем пользователю знать где каждая программа хранит свои настройки? Как правило это неизвестно, а ты почему то хочешь пользователей нагрузить этим.
-
> Добежал (18.12.2008 17:17:01) [1]
Нет такой папки, а есть папка в профиле одного из пользователей. Службы тоже не запускаются сами по себе, а от какого пользователя. Есть пользователь "All Users"
-
> Службы тоже не запускаются сами по себе, а от какого пользователя
согласен. Но для каждого пользователя в том же "Document and settings" есть своя папка. А какая папка будет у учетной записи SYSTEM?
> Зачем пользователю знать где каждая программа хранит свои > настройки?
я данный вопрос заблаговременно объяснил в топике. Читаем внимательнее.
-
> Добежал (18.12.08 17:17)
Для сервиса пофигу. Он пишет куда хочет, так как запускается с акканута local system.
Более правильно было бы - отдельно сервис, отдельно GUI. Сервис пишет куда привык, GUI в настройки определённого пользователя.
-
> какой путь хранения настроек выдаст NT-система, когда об > этом запрашивает сервис?
C:\Documents and Settings\LocalService C:\Documents and Settings\NetworkService
-
понимаю, пост большой, сразу все запомнить сложно. Я тогда буду отвечать на замечания цитатами из поста, если позволите. > Для сервиса пофигу. Он пишет куда хочет, так как запускается > с акканута local system
... > хотя в подавляющем большинстве случаев программа запускается > как сервис, но, конечно, нужно и предусмотреть возможность > запускаться в виде GUI-приложения (поддерживается и совместимость > с win9x
то есть, программу можно запустить из под пользовательского сеанса, такая возможность есть. Если ты предлагаешь при запуске из под пользователя писать в Application Data, а при запуске как сервиса писать в каталог с программной - это еще хуже, запутает вообще всех. Что я напишу в FAQ? Q: где программа хранит настройки?
A: если программа запущена в виде сервиса, то хранит... Да пользователи с ума сойдут. А еще остается win9x!!! Не не не...
-
> clickmaker © (18.12.08 17:49) [6] > > какой путь хранения настроек выдаст NT-система, когда > об > > этом запрашивает сервис? > > C:\Documents and Settings\LocalService > C:\Documents and Settings\NetworkService
угу, спасибо. Где-то так и думал.
-
> Более правильно было бы - отдельно сервис, отдельно GUI
так и есть. Независимо от того, как запущена сервер - в виде сервиса или из под пользователя - управляется он через WEB.
-
а есть какая-то константа, которая вернет путь по которому можно сохранить настройки для ВСЕХ пользователей? Должна же быть...
И куда она будет указывать на w2k / XP / Vista?
-
> Добежал (18.12.2008 17:40:04) [4]
LocalService/NetworlService
А то, что ты объяснил ничего не значит, внимательно прочитай и подумай "Зачем пользователю знать где каждая программа хранит свои настройки?" У тебя просто неверное интерфейсное решение.
-
> Добежал (18.12.2008 17:51:08) [8]
Это условный путь, ОС не стоят на месте. Правильно запрашивать у ОС. Например Виста сильно отличается от ХР
-
> а есть какая-то константа, которая вернет путь по которому > можно сохранить настройки для ВСЕХ пользователей?
CSIDL_COMMON_APPDATA
-
> CSIDL_COMMON_APPDATA
спасибо! Ээээ... Если знаешь, скажи еще, пожалуйста, а в w2k / XP / Vista куда будет этот путь указывать?
-
> w2k / XP / Vista куда будет этот путь указывать?
если нужна совместимость со всеми ОС, не стоит забиваться на конкретный путь. вчера он в w2k - C:\Documents and Settings\All Users, сегодня в висте - C:\Users\All Users, а завтра МС его еще куда-нибудь забубенит
-
-
> если нужна совместимость
ага, спасибо, clickmaker!
P.S. Да я и не забиваюсь, просто интересно, конечно конкретный путь через shell будет вытаскиваться.
P.S.S. Товарищи, кто что скажут по сабжу, какие мысли?
-
> clickmaker (18.12.2008 18:45:15) [15]
Не стоит на это закладываться даже в рамках одной ОС
-
> Добежал (18.12.2008 18:46:16) [16]
Не лезь куда не положено.
-
Я так скажу, не заморачиваясь заморочками Windows.
FreeBSD хранит настройки программ и левых сервисов в каталоге /usr/local/etc/. Пользовательские настройки обычно хранятся в домашнем каталоге пользователя (~/ в Unix, аналог %USERPROFILE%\ в Windows) в dot-формате — точка перед именем файла или каталога — они оказываются скрыты от глаз и не замусоривают восприятие домашнего каталога.
Каталог %APPDATA% Windows не имеет аналогов в Unix, так как находится в подкаталоге профиля пользователя, в котором пользователь может делать что захочет. То есть структура нерегламентирована.
-
> Добежал (18.12.08 18:46) [16]
> По каким признакам Vista определяет это? На одной из прог > она это выдает, на другой нет...
Манифест в ресурсах программы должен быть особенный.
Для инсталляторов она еще по другим признакам определяет.
-
> P.S.S. Товарищи, кто что скажут по сабжу, какие мысли?
а что еще надо то? Хранить в CSIDL_COMMON_APPDATA и всего делов.
-
DVM © (18.12.08 21:10) [21] Манифест в ресурсах программы должен быть особенный
можно поподробнее?
Никаким манифестом я не заморачивался, но на одной из прог почему-то Vista выдает это окошко. Хотя это обычная дельфовая прога, никаких ухищрений я не делал.
-
> Никаким манифестом я не заморачивался, но на одной из прог > почему-то Vista выдает это окошко.
Я точно не знаю, но вызов некоторых функций WinAPI тоже приводит к выдаче таких сообщений. Вроде список видел на MSDN даже.
> можно поподробнее?
<trustInfo xmlns=”urn:schemas-microsoft-com:asm.v3″> <security> <requestedPrivileges> <requestedExecutionLevel level=”requireAdministrator” uiAccess=”false”/> </requestedPrivileges> </security> </trustInfo>
Можно просто положить рядом с файлом имя_файла_программы.exe.manifest
-
> Можно просто положить рядом с файлом имя_файла_программы. > exe.manifest
Хотя нет, надо обязательно в ресурс.
-
-
> вчера он в w2k - C:\Documents and Settings\All Users, сегодня > в висте - C:\Users\All Users, а завтра МС его еще куда-нибудь > забубенит
ты меня обманул ;(((( Не All Users, а All Users\Application Data Принципиальная разница, по-умолчанию в папке Application Data в Vista запрещен обзор... Грубо говоря, когда пользователь щелкнет по ней два раза - получит "доступ запрещен". И что делать? Я писал в первом посте: > пользователи часто присылают нам файл настроек, описывают > ситуацию, мы настраиваем под них и отсылаем файл настроек > обратно
и что делать? Vista жжот блин ;( С одной стороны в папке с программой настройки не сохранишь - с включенным UAC в vista программа доступ не получит к настройкам. В рекомендуемой папке Application Data тоже хреново, в этом случае как объяснить пользователю действия, чтобы прислать нам файл настроек?!?! Не вижу пока варианта, кроме как ставить программу не в Program Files... бред какой-то...
-
Хранить где положено, пользователю дать кнопочку "Выслать файл настроек"
-
да, тоже сейчас склоняюсь к этому варианту. Тем более, сервер управляется через WEB, сделать ссылочку "экспорт файла настроек", который приведет к запросу о загрузке файла. И "импорт" там же...
-
> пользователи часто присылают нам файл настроек, описывают > ситуацию, мы настраиваем под них и отсылаем файл настроек > обратно
импорт/экспорт файла настроек? не заморачиваясь где на самом деле он находится в конкретной ОС
-
> Добежал (19.12.08 13:32) [27]
> Не вижу пока варианта, кроме как ставить программу не в > Program Files... бред какой-то...
А все потому, что неверно продумано приложение. Не следует делать по, которое одновременно может запускаться как сервис и как обычное приложение. Либо так либо сяк. Проблемы бы не было. Если же хотите поддерживать совместимость с Win9x то просто не давайте программе запускаться не как сервис под WinNT. А под Win9x она пусть хранит свои настройки где хочет, хоть в папке с программой, под WinNT - там где положено.
-
> [0] Добежал (18.12.08 17:17)
а вы пробовали запускать ваше приложение в XP, но не с правами админа, как успехи?
по-моему самый простой и надежный вариант - хранить настройки там же, но, как тут уже писали, добавить манифест, который будет при запуске запрашивать права админа + сделать проверку прав при запусе внутри программы - если пользователь не админ, то показывать предупреждение и закрывать программу.
-
> Не следует делать по, которое одновременно может запускаться > как сервис и как обычное приложение
по-моему, данная рекомендация - бред.
Программе по смыслу работы права администратора не нужны. Требовать права администратора только для того, чтобы уметь хранить настройки в каталоге с программой - как-то не феншуйно.
> а вы пробовали запускать ваше приложение в XP, но не с правами > админа, как успехи?
нормально успехи. Под продвинутым пользователем можно, ему разрешена запись в Program Files.
> добавить манифест, который будет при запуске запрашивать > права админа + сделать проверку прав при запусе внутри программы >
ну да, такое решение я уже выше обсуждал... Ну неплохо, конечно, окромя одного - программе по сути админские права не нужны. Это все равно что IE бы для работы просил права админа. Нелогично как-то было бы.
-
> [33] Добежал (19.12.08 15:13)
> ну да, такое решение я уже выше обсуждал... Ну неплохо, > конечно, окромя одного - программе по сути админские права > не нужны. Это все равно что IE бы для работы просил права > админа. Нелогично как-то было бы.
тогда и спорить не о чем. настройки должны храниться в CSIDL_COMMON_APPDATA (или же в аналоге для каждого пользователя отдельно), в win9x можно хранить либо в папке с программой, либо в "Мои документы".
-
народ, а почему многие игры хранят свой файлы именно в "Мои документы", а не в Application Data?
-
> Добежал (19.12.08 15:13) [33]
> по-моему, данная рекомендация - бред.
Ты не понял. Я хотел сказать, что если уж приложение может запускаться и как сервис и как обычное приложение, то пусть оно запускается как сервис в WinNT (и только так!) и как обычная программа в Win9x. Логично ведь?
-
> Добежал (19.12.08 15:30) [35]
> народ, а почему многие игры хранят свой файлы именно в "Мои > документы", а не в Application Data?
Потому что многие геймеры очень хотят таскать сои настройки с компа на комп, а заморачивать себе голову всякими Application Data не хотят.
-
> Добежал (19.12.2008 13:32:27) [27]
Я уже несколько раз сказал, не надо пользователю знать о каких либо файлах, а ты этого понять не можешь.
-
> Eraser (19.12.2008 14:50:32) [32]
Манифест обязателен, иначе нарвется еще и на виртуализацию.
-
> Добежал (19.12.2008 15:30:35) [35]
Знаний не хватило. Я участвовал в обсуждение аналогичной темы в SWRUS и там уровень знаний был виден очень четко. У кого он ниже те так и поступали.
-
> Anatoly Podgoretsky ©
> Знаний не хватило
У разработчиков известнейших игр не хватило знаний?
-
> Потому что многие геймеры очень хотят таскать сои настройки > с компа на комп
я к такому же мнению пришел. Допустим, там же сохраняются скриншоты, сделанные игрой. Ясен пень объяснить пользователю искать скриншоты в "Мои документы" проще, чем в Application Data, обзор которой в Vista еще и запрещен! Логично... И мне бы в этом смысле было бы удобно, только не существует "Мои документы" для сервиса...
-
Ха ха!!! А ведь есть папка "Общие документы", путь же к ней можно выцепить, правильно?
Так получается для меня это и есть самое лучшее место. С одной стороны, нет проблем с доступом, с другой стороны легко объяснить пользователю, где хранятся настройки...
Или могут быть косяки?
-
> путь же к ней можно выцепить, правильно?
Можно. CSIDL_COMMON_DOCUMENTS
> Или могут быть косяки?
Доступна в системах Windows NT и Windows 95, 98 с установленной Shfolder.dll.
-
> [42] Добежал (19.12.08 16:09)
> обзор которой в Vista еще и запрещен!
ерунда.
> [43] Добежал (19.12.08 16:10)
> Так получается для меня это и есть самое лучшее место. С > одной стороны, нет проблем с доступом, с другой стороны > легко объяснить пользователю, где хранятся настройки... > > Или могут быть косяки?
по сети кто нибудь удалит файл или подправит, потом по всей конторе виноватого искать.
меня не перестает поражать в некоторых людях черта изобретать велосипеды на ровном месте.
-
> ерунда.
в каком смысле ерунда? Обзор папки Application Data в Vista запрещен по-умолчанию - это факт.
Папку "Application Data" смотреть запрещено, а вот какой-нибудь "Application Data/Microsoft" можно. Не знаешь - не говори.
Именно поэтому игроделы сохраняют данные в "Мои документы", видимо. Так проще пользователю найти.
-
Оказывается в Vista этот CSIDL_APPDATA ведет не в "Application Data", а в "AppData\Roaming". Что такое Roaming, LocalLow, Local? Уф... запутался я.
-
> Добежал (19.12.2008 17:14:47) [47]
Дальше будет хуже, ты еще не все виста видел.
-
> Что такое Roaming, LocalLow, Local?
-
> Добежал (19.12.2008 17:38:49) [49]
Это папки
-
надеюсь, тут есть люди поумнее эстонцев
-
> [47] Добежал (19.12.08 17:14)
ну и что, какая разница как называются папки и где они находятся? есть определенный стандарт, придуманный MS еще для win2K, где приложения должны хранить настройки. код, выполненный в соответсвие с этим стандартом будет нормально сохранять настройки и в win2K и в висте.
-
> Добежал (19.12.2008 18:08:51) [51]
Есть и поумнее эстонцев и особо поумнее "Добежал"
|