Ситуация такая — продукт состоит из desktop приложения и win service — поставляются в одном сетапе конечно.
Сервису нужно знать куда выполняется установка что бы запускать приложение и читать settings — сначало думал достаточно обратиться к файлу настроек по имени т.к. ставил в одну папку, но под дебагом увидел что сервис лезит в C:\Windows.
Често говоря, не очень понимаю как передать сервису првильный путь, подскажите пожалуйста.
Здравствуйте, 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\» должна быть переменная среды соответствующая.
Здравствуйте, Qbit86, Вы писали:
Q>Должны лежать в пользовательских данных, например: «c:\Users\Victor\AppData\Roaming\Notepad++\config.xml».
А если сервис работает не под той учеткой, что и пользователь?
Если полный путь не указан, то любое приложение в качестве дефолтного использует рабочую папку. Её текущее значение можно получить через Directory.GetCurrentDirectory, а задать — Directory.SetetCurrentDirectory. Если бинарники сервиса и desktop'а лежат в одной папке, то папку с настройками можно вычислить из полного имени сборки. Лучше, однако, хранить настройки в специально предназначенных для это местах: "Documents and Settings\%username%\Application Data\YourProduct". Они есть как для каждого пользователя, так и общая для всех. Возможно, Вам потребуются несколько файлов настроек, один общий и по одному для каждого пользователя.
Здравствуйте, 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>».
Здравствуйте, alexsoff, Вы писали:
A>А если сервис работает не под той учеткой, что и пользователь?
Вариант 1: сервис использует стандартное settings API + предоставляет API клиенту для изменения настроек (вам же всё равно придётся общаться с клиентом, так?).
Вариант 2: реализуете свой configuration provider и извращаетесь как хотите.
Использовать один файл настроек 2мя приложениями — не самая лучшая идея. Во-первых получите гонку с возможным повреждением файла. Во-вторых %ALLUSERSPROFILE% простым пользователям доступен только для чтения.
Здравствуйте, Sinix, Вы писали:
S>Использовать один файл настроек 2мя приложениями — не самая лучшая идея. Во-первых получите гонку с возможным повреждением файла. Во-вторых %ALLUSERSPROFILE% простым пользователям доступен только для чтения.
Это маленькие проблемы Гонки во многих случаях исключаются самой логикой использования этих файлов, а делать запись в общие настройки обычным юзерам незачем. В крайнем случае можно при инсталляции или прямо из сервиса задать необходимый набор прав на соответствующую директорию. Иногда именно такой путь может оказаться наиболее подходящим во избежании лишних проблем с перемещаемыми профилями.
Здравствуйте, Sinix, Вы писали:
S>Вариант 1: (вам же всё равно придётся общаться с клиентом, так?).
Все зависит от ситуации, к сожалению, автор топика не дал полной картины о происхождении настроек S>Использовать один файл настроек 2мя приложениями — не самая лучшая идея.
Если настройки readonly, тогда наоборот, я вижу в этом самый правильный вариант.
по имени т.к. ставил в одну папку, но под дебагом увидел что сервис лезит в C:\Windows. AD>Често говоря, не очень понимаю как передать сервису првильный путь, подскажите пожалуйста.