как правильно реализовать хранение settings?
От: Alex Dav Россия  
Дата: 30.11.10 09:31
Оценка:
Ситуация такая — продукт состоит из desktop приложения и win service — поставляются в одном сетапе конечно.
Сервису нужно знать куда выполняется установка что бы запускать приложение и читать settings — сначало думал достаточно обратиться к файлу настроек по имени т.к. ставил в одну папку, но под дебагом увидел что сервис лезит в C:\Windows.
Често говоря, не очень понимаю как передать сервису првильный путь, подскажите пожалуйста.

Спасибо.
Re: как правильно реализовать хранение settings?
От: alexsoff Россия  
Дата: 30.11.10 09:33
Оценка: 1 (1)
Здравствуйте, Alex Dav, Вы писали:

AD>Често говоря, не очень понимаю как передать сервису првильный путь, подскажите пожалуйста.

Через реестр?
Re: В пользовательских данных
От: Qbit86 Кипр
Дата: 30.11.10 09:38
Оценка: 1 (1) +1
Здравствуйте, Alex Dav, Вы писали:

AD>Ситуация такая — продукт состоит из desktop приложения и win service — поставляются в одном сетапе конечно.

AD>Сервису нужно знать куда выполняется установка что бы запускать приложение и читать settings — сначало думал достаточно обратиться к файлу настроек по имени т.к. ставил в одну папку, но под дебагом увидел что сервис лезит в C:\Windows.
AD>Често говоря, не очень понимаю как передать сервису првильный путь, подскажите пожалуйста.

Settings не должны лежать в папке установки приложения. Должны лежать в пользовательских данных, например: «c:\Users\Victor\AppData\Roaming\Notepad++\config.xml». Вместо «c:\Users\Victor\AppData\Roaming\» должна быть переменная среды соответствующая.
Глаза у меня добрые, но рубашка — смирительная!
Re[2]: В пользовательских данных
От: alexsoff Россия  
Дата: 30.11.10 09:42
Оценка:
Здравствуйте, Qbit86, Вы писали:

Q>Должны лежать в пользовательских данных, например: «c:\Users\Victor\AppData\Roaming\Notepad++\config.xml».

А если сервис работает не под той учеткой, что и пользователь?
Re: как правильно реализовать хранение settings?
От: Jolly Roger  
Дата: 30.11.10 09:51
Оценка: 1 (1)
Здравствуйте, Alex Dav, Вы писали:

Если полный путь не указан, то любое приложение в качестве дефолтного использует рабочую папку. Её текущее значение можно получить через Directory.GetCurrentDirectory, а задать — Directory.SetetCurrentDirectory. Если бинарники сервиса и desktop'а лежат в одной папке, то папку с настройками можно вычислить из полного имени сборки. Лучше, однако, хранить настройки в специально предназначенных для это местах: "Documents and Settings\%username%\Application Data\YourProduct". Они есть как для каждого пользователя, так и общая для всех. Возможно, Вам потребуются несколько файлов настроек, один общий и по одному для каждого пользователя.
"Нормальные герои всегда идут в обход!"
Re[3]: В пользовательских данных
От: Qbit86 Кипр
Дата: 30.11.10 09:51
Оценка:
Здравствуйте, alexsoff, Вы писали:

Q>>Должны лежать в пользовательских данных, например: «c:\Users\Victor\AppData\Roaming\Notepad++\config.xml».

A>А если сервис работает не под той учеткой, что и пользователь?

Там смотреть надо. Общие настройки сервиса и клиента можно в %AllUsersProfile% хранить. Например, «c:\ProgramData\Adobe\Updater6\AdobeESDGlobalApps.xml» хранит путь установки: «<InstallPath>C:\Program Files\Adobe Reader 9.0\Reader</InstallPath>».
Глаза у меня добрые, но рубашка — смирительная!
Re[3]: В пользовательских данных
От: Sinix  
Дата: 30.11.10 10:00
Оценка: 1 (1)
Здравствуйте, alexsoff, Вы писали:

A>А если сервис работает не под той учеткой, что и пользователь?


Вариант 1: сервис использует стандартное settings API + предоставляет API клиенту для изменения настроек (вам же всё равно придётся общаться с клиентом, так?).
Вариант 2: реализуете свой configuration provider и извращаетесь как хотите.

Использовать один файл настроек 2мя приложениями — не самая лучшая идея. Во-первых получите гонку с возможным повреждением файла. Во-вторых %ALLUSERSPROFILE% простым пользователям доступен только для чтения.
Re[4]: В пользовательских данных
От: Jolly Roger  
Дата: 30.11.10 10:16
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Использовать один файл настроек 2мя приложениями — не самая лучшая идея. Во-первых получите гонку с возможным повреждением файла. Во-вторых %ALLUSERSPROFILE% простым пользователям доступен только для чтения.


Это маленькие проблемы Гонки во многих случаях исключаются самой логикой использования этих файлов, а делать запись в общие настройки обычным юзерам незачем. В крайнем случае можно при инсталляции или прямо из сервиса задать необходимый набор прав на соответствующую директорию. Иногда именно такой путь может оказаться наиболее подходящим во избежании лишних проблем с перемещаемыми профилями.
"Нормальные герои всегда идут в обход!"
Re[4]: В пользовательских данных
От: alexsoff Россия  
Дата: 30.11.10 10:17
Оценка: +1
Здравствуйте, Sinix, Вы писали:

S>Вариант 1: (вам же всё равно придётся общаться с клиентом, так?).

Все зависит от ситуации, к сожалению, автор топика не дал полной картины о происхождении настроек
S>Использовать один файл настроек 2мя приложениями — не самая лучшая идея.
Если настройки readonly, тогда наоборот, я вижу в этом самый правильный вариант.
Re: Всем большое спасибо
От: Alex Dav Россия  
Дата: 30.11.10 10:20
Оценка:
Помогли
Re: как правильно реализовать хранение settings?
От: rsn81 Россия http://rsn81.wordpress.com
Дата: 30.11.10 13:00
Оценка:
Здравствуйте, Alex Dav, Вы писали:

Client Settings FAQ
Автор(ы): Raghavendra Prabhu
Дата: 30.07.2006
Одна из клевых новых фишек .NET 2.0/VS 2005 – простое в использовании, расширяемое API для управления настройками приложений и их пользователей, т.е. данными, которые должны сохраняться при работе клиентского приложения.
Несмотря на то, что новая фича достаточно прозрачна в использовании, мы часто получаем вопросы от пользователей, реализующих собственные сценарии ее использования — почему <это> работает так и как сделать, чтобы <то> работало немного по-другому.
.
Re: как правильно реализовать хранение settings?
От: MozgC США http://nightcoder.livejournal.com
Дата: 30.11.10 13:31
Оценка:
Здравствуйте, Alex Dav, Вы писали:

AD>Спасибо.


Обратите внимание на это свойство:
Application.CommonAppDataPath
Re: как правильно реализовать хранение settings?
От: _d_m_  
Дата: 01.12.10 05:27
Оценка:
Здравствуйте, Alex Dav, Вы писали:

по имени т.к. ставил в одну папку, но под дебагом увидел что сервис лезит в C:\Windows.
AD>Често говоря, не очень понимаю как передать сервису првильный путь, подскажите пожалуйста.

Обрати внимание на Application.StartupPath
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.