Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проектирование windows service, Как настраивать и где хранить настройки 
V
    Опции темы
Gleb
Дата 17.2.2009, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 11.6.2005

Репутация: 1
Всего: 1



Поделитесь пожалуйста опытом проектирования windows service.
Передо мной стоит такая задача: написать windows service + Win-form конфигуратор + необходимые для работы параметры задавать в setup wizard'e
т.е. как это должно выглядеть для пользователя:
1. В мастере установки от пользователя требуется задать только самые необходимые параметры для запуска службы.
2. После установки служба должна работать сразу.
3. В любой момент ее можно перенастроить, включить или выключить из Win-form конфигуратора.

Пока, все что я могу - это создать службу, которая читает при запуске настройки из app.config

Как лучше реализовать 1 и 3 пункт в плане хранения и передачи настроек?
Нужно ли копировать файл службы в папку system32? Где размещать сами настройки?
Может быть у вас есть своя собственная схема подобного проекта, поделитесь пожалуйста. Так же приветствуются ссылки на информацию такого рода.
PM MAIL   Вверх
unicuum
  Дата 17.2.2009, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 16.3.2005
Где: Рашка

Репутация: 1
Всего: 8



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

Например:
установка: -i
удаление: -u
старт: -s
пауза: -p
рестарт: -r

Ну и так далее. Далее без аргументов вызываешь форму функцией Run класса Application, в общем стандарт. А если аргументы есть и они распознаваемы, то работаешь с классом службы. И то и другое может использовать весь твой функционал программы, тут разница лишь в том, как ты создаешь процесс.

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

Цитата(Gleb @  17.2.2009,  15:17 Найти цитируемый пост)
Нужно ли копировать файл службы в папку system32?

Нет, не нужно, но решать тебе. Во всяком случае те проекты, которые я смотрел и которые имеют два в одном, то есть эксишку со службой и приложением внутри, так не делают.

Цитата(Gleb @  17.2.2009,  15:17 Найти цитируемый пост)
Где размещать сами настройки?

Лучше всего в папке с программой, я бы сделал xml файл настроек и писал туда, но ты опять же можешь делать как тебе вздумается.

Цитата(Gleb @  17.2.2009,  15:17 Найти цитируемый пост)
Так же приветствуются ссылки на информацию такого рода. 

Прочитай книгу про создания виндовых служб, с приложениями думаю и так всё ясно. Почитай МСДН.

Цитата(Gleb @  17.2.2009,  15:17 Найти цитируемый пост)
написать windows service + Win-form конфигуратор + необходимые для работы параметры задавать в setup wizard'e

Визард это отдельный проект в том же решении, не думаю, что это уж так важно, но думаю проблем у тебя особых не будет. Этим можно заняться и под конец. О том как делать визарды тоже читай или в книжках или в МСДН, в книжках это обычно в последних главах идёт.


--------------------
user posted image
обычный день на винграде
PM   Вверх
unicuum
  Дата 17.2.2009, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 16.3.2005
Где: Рашка

Репутация: 1
Всего: 8



Цитата(Gleb @  17.2.2009,  17:01 Найти цитируемый пост)
Привет. Спасибо за ответ. Вот еще вопрос в догоночку: как сделать реинициализацию настроек уже запущенной службой?
Через стоп-старт? Т.е. в конфигураторе нажали кнопку "применить", конфигуратор переписал настройки и перезапустил службу, так?
Заранее спасибо.

Не так. Суть программирования не в том чтобы подстраиваться под чьи-то решения. Ты сам творец своих программ и можешь воплотить любую задумку.

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

По мне это не самый лучший вариант, не проще ли управлять настройками на лету? Прочитай про "Домены приложений" в дотнете, тебе многое станет понятно. С принципиальной точки зрения для программистов, между виндовым приложением и виндовой службой нет никакой разницы. 

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

Вот что тебе в первую очередь необходимо помнить. В System.Windows.Forms есть класс Application. Внимательно посмотри находящиеся в нём методы. И посмотри так же System.ServiceProcess.ServiceBase. В обоих проектах Output Type - Windows Application, различия начинаются лишь внутри, как правило с точки входа в приложения.

Пример точки входа Windows Application
Код
static void Main() 
{
    Application.Run(new Form1());
}


Пример точки входа Windows Services
Код
static void Main()
{
    System.ServiceProcess.ServiceBase[] ServicesToRun;

    // More than one user Service may run within the same process. To add
    // another service to this process, change the following line to
    // create a second service object. For example,
    //
    //   ServicesToRun = new System.ServiceProcess.ServiceBase[] {new Service1(), new MySecondUserService()};
    //
    ServicesToRun = new System.ServiceProcess.ServiceBase[] { new Service1() };

    System.ServiceProcess.ServiceBase.Run(ServicesToRun);
}


А дальше идёт обычная работа с данными и так далее. И уже тебе решать, нужен ли службе GUI или не нужен и прочее. По идее ты бы мог чуточку переработать код точки входа в приложение и сделать для программы кнопочку, которая бы автоматически переводила его в режим службы в режим приложения и обратно. И когда оно в режиме службы, чтобы тебе GUI не мешался, мог бы поместить его в трей (первый попавшийся поиском пример).

У тебя сейчас скорее психологическое ограничение стоит, так как ты не знаешь всех возможностей дотнета. Лично мне думается, что проще всего прерывать из главной формы текущий процесс, когда находимся в режиме приложения. И то же самое касается режима службы, только там это делается по другому. А в точке входа сделать замкнутый цикл, который будет работать и активировать то одно, то другое, пока пользователь точно не захочет выйти из программы.

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


--------------------
user posted image
обычный день на винграде
PM   Вверх
Gleb
Дата 17.2.2009, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 11.6.2005

Репутация: 1
Всего: 1



Спасибо, теперь стало намного понятнее. Кармы не хватает, так бы с удовольствием поставил плюс.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0435 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.