Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2009.02.15;
Скачать: [xml.tar.bz2];

Вниз

Политика 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 и там уровень знаний был виден очень четко. У кого он ниже те так и поступали.



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

Форум: "Прочее";
Текущий архив: 2009.02.15;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.57 MB
Время: 0.006 c
15-1229870744
Кое кто
2008-12-21 17:45
2009.02.15
Интересная фраза (Не помню чья)


10-1152721470
TStas
2006-07-12 20:24
2009.02.15
Как узнать число листов в экселевской книге?


2-1231303960
Лазарь
2009-01-07 07:52
2009.02.15
Как заставит программу работать автоматически?!


15-1228987015
ЗапомниСынок
2008-12-11 12:16
2009.02.15
DLINK DIR-400


15-1227608723
Долетел
2008-11-25 13:25
2009.02.15
Управление удаленным компьютером по сети





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский