Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.02.15;
Скачать: CL | DM;

Вниз

Политика NT - хранить настройки программы отдельно от программы   Найти похожие ветки 

 
Добежал   (2008-12-18 17:17) [0]

Думаю, большинство знает, что 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 - аксиома. Я перечислил свое видение достоинств и недостатков каждого способа. Давайте обсудим.


 
Добежал   (2008-12-18 17:17) [1]

P.S.S. Параллельно вопросик, сейчас проверять просто неудобно, а вопрос сформировался - какой путь хранения настроек выдаст NT-система, когда об этом запрашивает сервис? Для юзверей-сеансов она выдает в "Application Data" насколько я помню, а для сервиса?!


 
Anatoly Podgoretsky ©   (2008-12-18 17:28) [2]

> Добежал  (18.12.2008 17:17:00)  [0]

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


 
Anatoly Podgoretsky ©   (2008-12-18 17:31) [3]

> Добежал  (18.12.2008 17:17:01)  [1]

Нет такой папки, а есть папка в профиле одного из пользователей. Службы тоже не запускаются сами по себе, а от какого пользователя. Есть пользователь "All Users"


 
Добежал   (2008-12-18 17:40) [4]


> Службы тоже не запускаются сами по себе, а от какого пользователя


согласен. Но для каждого пользователя в том же "Document and settings" есть своя папка.
А какая папка будет у учетной записи SYSTEM?


> Зачем пользователю знать где каждая программа хранит свои
> настройки?


я данный вопрос заблаговременно объяснил в топике. Читаем внимательнее.


 
Городской Шаман   (2008-12-18 17:41) [5]


> Добежал   (18.12.08 17:17)  


Для сервиса пофигу. Он пишет куда хочет, так как запускается с акканута local system.

Более правильно было бы - отдельно сервис, отдельно GUI. Сервис пишет куда привык, GUI в настройки определённого пользователя.


 
clickmaker ©   (2008-12-18 17:49) [6]

> какой путь хранения настроек выдаст NT-система, когда об
> этом запрашивает сервис?

C:\Documents and Settings\LocalService
C:\Documents and Settings\NetworkService


 
Добежал   (2008-12-18 17:50) [7]

понимаю, пост большой, сразу все запомнить сложно. Я тогда буду отвечать на замечания цитатами из поста, если позволите.


> Для сервиса пофигу. Он пишет куда хочет, так как запускается
> с акканута local system


...


>  хотя в подавляющем большинстве случаев программа запускается
> как сервис, но, конечно, нужно и предусмотреть возможность
> запускаться в виде GUI-приложения (поддерживается и совместимость
> с win9x


то есть, программу можно запустить из под пользовательского сеанса, такая возможность есть.

Если ты предлагаешь при запуске из под пользователя писать в Application Data, а при запуске как сервиса писать в каталог с программной - это еще хуже, запутает вообще всех. Что я напишу в FAQ?

Q: где программа хранит настройки?
A: если программа запущена в виде сервиса, то хранит...


Да пользователи с ума сойдут. А еще остается win9x!!! Не не не...


 
Добежал   (2008-12-18 17:51) [8]


> clickmaker ©   (18.12.08 17:49) [6]
> > какой путь хранения настроек выдаст NT-система, когда
> об
> > этом запрашивает сервис?
>
> C:\Documents and Settings\LocalService
> C:\Documents and Settings\NetworkService


угу, спасибо. Где-то так и думал.


 
Добежал   (2008-12-18 17:52) [9]


> Более правильно было бы - отдельно сервис, отдельно GUI


так и есть. Независимо от того, как запущена сервер - в виде сервиса или из под пользователя - управляется он через WEB.


 
Добежал   (2008-12-18 18:08) [10]

а есть какая-то константа, которая вернет путь по которому можно сохранить настройки для ВСЕХ пользователей? Должна же быть...

И куда она будет указывать на w2k / XP / Vista?


 
Anatoly Podgoretsky ©   (2008-12-18 18:13) [11]

> Добежал  (18.12.2008 17:40:04)  [4]

LocalService/NetworlService

А то, что ты объяснил ничего не значит, внимательно прочитай и подумай "Зачем пользователю знать где каждая программа хранит свои настройки?"
У тебя просто неверное интерфейсное решение.


 
Anatoly Podgoretsky ©   (2008-12-18 18:18) [12]

> Добежал  (18.12.2008 17:51:08)  [8]

Это условный путь, ОС не стоят на месте. Правильно запрашивать у ОС. Например Виста сильно отличается от ХР


 
clickmaker ©   (2008-12-18 18:24) [13]

> а есть какая-то константа, которая вернет путь по которому
> можно сохранить настройки для ВСЕХ пользователей?

CSIDL_COMMON_APPDATA


 
Добежал   (2008-12-18 18:26) [14]


> CSIDL_COMMON_APPDATA


спасибо! Ээээ... Если знаешь, скажи еще, пожалуйста, а в w2k / XP / Vista куда будет этот путь указывать?


 
clickmaker ©   (2008-12-18 18:45) [15]

> w2k / XP / Vista куда будет этот путь указывать?

если нужна совместимость со всеми ОС, не стоит забиваться на конкретный путь.
вчера он в w2k - C:\Documents and Settings\All Users, сегодня в висте - C:\Users\All Users, а завтра МС его еще куда-нибудь забубенит


 
Добежал   (2008-12-18 18:46) [16]

Еще, кстати, вопросик - при запуске некоторых программ Vista выдает сообщение, что мол этой программе нужны админские полномочия и бла бла бла (UAC):

http://s61.radikal.ru/i173/0812/33/7cd10e550fcd.jpg
(зеркало): http://pic.ipicture.ru/uploads/081218/TNPVYhMIRu.jpg

По каким признакам Vista определяет это? На одной из прог она это выдает, на другой нет...

Как сделать так, чтобы она выдавала это окно на нужной программе? Какую-то функцию экспортировать в исходниках, какой-то флаг поставить или как?


 
Добежал   (2008-12-18 18:48) [17]


> если нужна совместимость


ага, спасибо, clickmaker!

P.S. Да я и не забиваюсь, просто интересно, конечно конкретный путь через shell будет вытаскиваться.

P.S.S. Товарищи, кто что скажут по сабжу, какие мысли?


 
Anatoly Podgoretsky ©   (2008-12-18 19:10) [18]

> clickmaker  (18.12.2008 18:45:15)  [15]

Не стоит на это закладываться даже в рамках одной ОС


 
Anatoly Podgoretsky ©   (2008-12-18 19:11) [19]

> Добежал  (18.12.2008 18:46:16)  [16]

Не лезь куда не положено.


 
iZEN   (2008-12-18 20:06) [20]

Я так скажу, не заморачиваясь заморочками Windows.

FreeBSD хранит настройки программ и левых сервисов в каталоге /usr/local/etc/.
Пользовательские настройки обычно хранятся в домашнем каталоге пользователя (~/ в Unix, аналог %USERPROFILE%\ в Windows) в dot-формате — точка перед именем файла или каталога — они оказываются скрыты от глаз и не замусоривают восприятие домашнего каталога.

Каталог %APPDATA% Windows не имеет аналогов в Unix, так как находится в подкаталоге профиля пользователя, в котором пользователь может делать что захочет. То есть структура нерегламентирована.


 
DVM ©   (2008-12-18 21:10) [21]


> Добежал   (18.12.08 18:46) [16]


> По каким признакам Vista определяет это? На одной из прог
> она это выдает, на другой нет...

Манифест в ресурсах программы должен быть особенный.

Для инсталляторов она еще по другим признакам определяет.


 
DVM ©   (2008-12-18 21:11) [22]


> P.S.S. Товарищи, кто что скажут по сабжу, какие мысли?

а что еще надо то? Хранить в CSIDL_COMMON_APPDATA и всего делов.


 
Пробегал2....   (2008-12-18 21:37) [23]

DVM ©   (18.12.08 21:10) [21]
Манифест в ресурсах программы должен быть особенный


можно поподробнее?

Никаким манифестом я не заморачивался, но на одной из прог почему-то Vista выдает это окошко. Хотя это обычная дельфовая прога, никаких ухищрений я не делал.


 
DVM ©   (2008-12-18 22:29) [24]


> Никаким манифестом я не заморачивался, но на одной из прог
> почему-то Vista выдает это окошко.

Я точно не знаю, но вызов некоторых функций WinAPI тоже приводит к выдаче таких сообщений. Вроде список видел на MSDN даже.


> можно поподробнее?

<trustInfo xmlns=”urn:schemas-microsoft-com:asm.v3&#8243;>
  <security>
    <requestedPrivileges>
      <requestedExecutionLevel
        level=”requireAdministrator”
        uiAccess=”false”/>
      </requestedPrivileges>
     </security>
</trustInfo>

Можно просто положить рядом с файлом имя_файла_программы.exe.manifest


 
DVM ©   (2008-12-18 22:31) [25]


> Можно просто положить рядом с файлом имя_файла_программы.
> exe.manifest

Хотя нет, надо обязательно в ресурс.


 
DVM ©   (2008-12-18 22:34) [26]


> Пробегал2....   (18.12.08 21:37) [23]

во:

http://download.microsoft.com/download/5/6/a/56a0ed11-e073-42f9-932b-38acd478f46d/WindowsVistaUACDevReqs.doc


 
Добежал   (2008-12-19 13:32) [27]


> вчера он в 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... бред какой-то...


 
wal ©   (2008-12-19 13:43) [28]

Хранить где положено, пользователю дать кнопочку "Выслать файл настроек"


 
Добежал   (2008-12-19 13:44) [29]

да, тоже сейчас склоняюсь к этому варианту. Тем более, сервер управляется через WEB, сделать ссылочку "экспорт файла настроек", который приведет к запросу о загрузке файла. И "импорт" там же...


 
-SeM-   (2008-12-19 13:45) [30]


> пользователи часто присылают нам файл настроек, описывают  
> ситуацию, мы настраиваем под них и отсылаем файл настроек
> обратно

импорт/экспорт файла настроек? не заморачиваясь где на самом деле он находится в конкретной ОС


 
DVM ©   (2008-12-19 14:22) [31]


> Добежал   (19.12.08 13:32) [27]


> Не вижу пока варианта, кроме как ставить программу не в
> Program Files... бред какой-то...

А все потому, что неверно продумано приложение. Не следует делать по, которое одновременно может запускаться как сервис и как обычное приложение. Либо так либо сяк. Проблемы бы не было.
Если же хотите поддерживать совместимость с Win9x то просто не давайте программе запускаться не как сервис под WinNT. А под Win9x она пусть хранит свои настройки где хочет, хоть в папке с программой, под WinNT - там где положено.


 
Eraser ©   (2008-12-19 14:50) [32]

> [0] Добежал   (18.12.08 17:17)

а вы пробовали запускать ваше приложение в XP, но не с правами админа, как успехи?

по-моему самый простой и надежный вариант - хранить настройки там же, но, как тут уже писали, добавить манифест, который будет при запуске запрашивать права админа + сделать проверку прав при запусе внутри программы - если пользователь не админ, то показывать предупреждение и закрывать программу.


 
Добежал   (2008-12-19 15:13) [33]


> Не следует делать по, которое одновременно может запускаться
> как сервис и как обычное приложение


по-моему, данная рекомендация - бред.

Программе по смыслу работы права администратора не нужны. Требовать права администратора только для того, чтобы уметь хранить настройки в каталоге с программой - как-то не феншуйно.


> а вы пробовали запускать ваше приложение в XP, но не с правами
> админа, как успехи?


нормально успехи. Под продвинутым пользователем можно, ему разрешена запись в Program Files.


> добавить манифест, который будет при запуске запрашивать
> права админа + сделать проверку прав при запусе внутри программы
>


ну да, такое решение я уже выше обсуждал... Ну неплохо, конечно, окромя одного - программе по сути админские права не нужны. Это все равно что IE бы для работы просил права админа. Нелогично как-то было бы.


 
Eraser ©   (2008-12-19 15:15) [34]

> [33] Добежал   (19.12.08 15:13)


> ну да, такое решение я уже выше обсуждал... Ну неплохо,
> конечно, окромя одного - программе по сути админские права
> не нужны. Это все равно что IE бы для работы просил права
> админа. Нелогично как-то было бы.

тогда и спорить не о чем. настройки должны храниться в CSIDL_COMMON_APPDATA (или же в аналоге для каждого пользователя отдельно), в win9x можно хранить либо в папке с программой, либо в "Мои документы".


 
Добежал   (2008-12-19 15:30) [35]

народ, а почему многие игры хранят свой файлы именно в "Мои документы", а не в Application Data?


 
DVM ©   (2008-12-19 15:36) [36]


> Добежал   (19.12.08 15:13) [33]


> по-моему, данная рекомендация - бред.

Ты не понял. Я хотел сказать, что если уж приложение может запускаться и как сервис и как обычное приложение, то пусть оно запускается как сервис в WinNT (и только так!) и как обычная программа в Win9x. Логично ведь?


 
DVM ©   (2008-12-19 15:38) [37]


> Добежал   (19.12.08 15:30) [35]


> народ, а почему многие игры хранят свой файлы именно в "Мои
> документы", а не в Application Data?

Потому что многие геймеры очень хотят таскать сои настройки с компа на комп, а   заморачивать себе голову всякими Application Data не хотят.


 
Anatoly Podgoretsky ©   (2008-12-19 15:43) [38]

> Добежал  (19.12.2008 13:32:27)  [27]

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


 
Anatoly Podgoretsky ©   (2008-12-19 15:47) [39]

> Eraser  (19.12.2008 14:50:32)  [32]

Манифест обязателен, иначе нарвется еще и на виртуализацию.


 
Anatoly Podgoretsky ©   (2008-12-19 15:48) [40]

> Добежал  (19.12.2008 15:30:35)  [35]

Знаний не хватило. Я участвовал в обсуждение аналогичной темы в SWRUS и там уровень знаний был виден очень четко. У кого он ниже те так и поступали.


 
DVM ©   (2008-12-19 15:58) [41]


> Anatoly Podgoretsky ©


> Знаний не хватило

У разработчиков известнейших игр не хватило знаний?


 
Добежал   (2008-12-19 16:09) [42]


> Потому что многие геймеры очень хотят таскать сои настройки
> с компа на комп


я к такому же мнению пришел. Допустим, там же сохраняются скриншоты, сделанные  игрой. Ясен пень объяснить пользователю искать скриншоты в "Мои документы" проще, чем в Application Data, обзор которой в Vista еще и запрещен!
Логично... И мне бы в этом смысле было бы удобно, только не существует "Мои документы" для сервиса...


 
Добежал   (2008-12-19 16:10) [43]

Ха ха!!! А ведь есть папка "Общие документы", путь же к ней можно выцепить, правильно?

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

Или могут быть косяки?


 
DVM ©   (2008-12-19 16:13) [44]


> путь же к ней можно выцепить, правильно?

Можно. CSIDL_COMMON_DOCUMENTS


> Или могут быть косяки?

Доступна в системах Windows NT и Windows 95, 98 с установленной Shfolder.dll.


 
Eraser ©   (2008-12-19 16:30) [45]

> [42] Добежал   (19.12.08 16:09)


> обзор которой в Vista еще и запрещен!

ерунда.

> [43] Добежал   (19.12.08 16:10)


> Так получается для меня это и есть самое лучшее место. С
> одной стороны, нет проблем с доступом, с другой стороны
> легко объяснить пользователю, где хранятся настройки...
>
> Или могут быть косяки?

по сети кто нибудь удалит файл или подправит, потом по всей конторе виноватого искать.

меня не перестает поражать в некоторых людях черта изобретать велосипеды на ровном месте.


 
Добежал   (2008-12-19 16:56) [46]


> ерунда.


в каком смысле ерунда? Обзор папки Application Data в Vista запрещен по-умолчанию - это факт.

Папку "Application Data" смотреть запрещено, а вот какой-нибудь "Application Data/Microsoft" можно. Не знаешь - не говори.

Именно поэтому игроделы сохраняют данные в "Мои документы", видимо. Так проще пользователю найти.


 
Добежал   (2008-12-19 17:14) [47]

Оказывается в Vista этот CSIDL_APPDATA ведет не в "Application Data", а в "AppData\Roaming". Что такое Roaming, LocalLow, Local?
Уф... запутался я.


 
Anatoly Podgoretsky ©   (2008-12-19 17:34) [48]

> Добежал  (19.12.2008 17:14:47)  [47]

Дальше будет хуже, ты еще не все виста видел.


 
Добежал   (2008-12-19 17:38) [49]


> Что такое Roaming, LocalLow, Local?


 
Anatoly Podgoretsky ©   (2008-12-19 17:46) [50]

> Добежал  (19.12.2008 17:38:49)  [49]

Это папки


 
Добежал   (2008-12-19 18:08) [51]

надеюсь, тут есть люди поумнее эстонцев


 
Eraser ©   (2008-12-19 18:13) [52]

> [47] Добежал   (19.12.08 17:14)

ну и что, какая разница как называются папки и где они находятся? есть определенный стандарт, придуманный MS еще для win2K, где приложения должны хранить настройки. код, выполненный в соответсвие с этим стандартом будет нормально сохранять настройки и в win2K и в висте.


 
Anatoly Podgoretsky ©   (2008-12-19 18:29) [53]

> Добежал  (19.12.2008 18:08:51)  [51]

Есть и поумнее эстонцев и особо поумнее "Добежал"



Страницы: 1 2 вся ветка

Текущий архив: 2009.02.15;
Скачать: CL | DM;

Наверх




Память: 0.63 MB
Время: 0.02 c
2-1231148439
***mikle***
2009-01-05 12:40
2009.02.15
Изменение длины динамического массива внутри процедуры.


15-1229609835
Добежал
2008-12-18 17:17
2009.02.15
Политика NT - хранить настройки программы отдельно от программы


15-1229514723
DeeNamid
2008-12-17 14:52
2009.02.15
Антивирус определяет программу как троян


2-1231259024
Семён
2009-01-06 19:23
2009.02.15
Как обратиться к компоненту на форме по номеру?


15-1229579062
Slider007
2008-12-18 08:44
2009.02.15
С днем рождения ! 18 декабря 2008 четверг