| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Проектирование windows service |
| Автор: Gleb 17.2.2009, 15:17 |
| Поделитесь пожалуйста опытом проектирования windows service. Передо мной стоит такая задача: написать windows service + Win-form конфигуратор + необходимые для работы параметры задавать в setup wizard'e т.е. как это должно выглядеть для пользователя: 1. В мастере установки от пользователя требуется задать только самые необходимые параметры для запуска службы. 2. После установки служба должна работать сразу. 3. В любой момент ее можно перенастроить, включить или выключить из Win-form конфигуратора. Пока, все что я могу - это создать службу, которая читает при запуске настройки из app.config Как лучше реализовать 1 и 3 пункт в плане хранения и передачи настроек? Нужно ли копировать файл службы в папку system32? Где размещать сами настройки? Может быть у вас есть своя собственная схема подобного проекта, поделитесь пожалуйста. Так же приветствуются ссылки на информацию такого рода. |
| Автор: unicuum 17.2.2009, 18:26 | ||||||
Не так. Суть программирования не в том чтобы подстраиваться под чьи-то решения. Ты сам творец своих программ и можешь воплотить любую задумку. Предположим ты решил, что тебе нужна такая служба, которая при активации процесса считывает настройки из файла и так до конца с ними и работает. Естественно после этого вынужден будешь делать перезагрузку службы после того как каким-нибудь способом внесёшь необходимые изменения в файл конфигурации. По мне это не самый лучший вариант, не проще ли управлять настройками на лету? Прочитай про "Домены приложений" в дотнете, тебе многое станет понятно. С принципиальной точки зрения для программистов, между виндовым приложением и виндовой службой нет никакой разницы. Да они запускают свои процессы с помощью разных классов и разными методами, но на этом все различия и заканчиваются. Даже веб-приложения и веб-службы в этом смысле не отличаются от них слишком сильно, но они хотя бы немного отличаются, а тут вообще одно и тоже. Вот что тебе в первую очередь необходимо помнить. В System.Windows.Forms есть класс Application. Внимательно посмотри находящиеся в нём методы. И посмотри так же System.ServiceProcess.ServiceBase. В обоих проектах Output Type - Windows Application, различия начинаются лишь внутри, как правило с точки входа в приложения. Пример точки входа Windows Application
Пример точки входа Windows Services
А дальше идёт обычная работа с данными и так далее. И уже тебе решать, нужен ли службе GUI или не нужен и прочее. По идее ты бы мог чуточку переработать код точки входа в приложение и сделать для программы кнопочку, которая бы автоматически переводила его в режим службы в режим приложения и обратно. И когда оно в режиме службы, чтобы тебе GUI не мешался, мог бы поместить его в трей (http://www.devcity.net/Articles/74/servicecontroller.aspx). У тебя сейчас скорее психологическое ограничение стоит, так как ты не знаешь всех возможностей дотнета. Лично мне думается, что проще всего прерывать из главной формы текущий процесс, когда находимся в режиме приложения. И то же самое касается режима службы, только там это делается по другому. А в точке входа сделать замкнутый цикл, который будет работать и активировать то одно, то другое, пока пользователь точно не захочет выйти из программы. Настройки уже сказал, в режиме приложения и так понятно как менять, а в режиме службы запихнуть вызов форм в трей, тем более что формы в обоих режимах одни и те же, просто запускаются в разных процессах. |
| Автор: Gleb 17.2.2009, 18:35 |
| Спасибо, теперь стало намного понятнее. Кармы не хватает, так бы с удовольствием поставил плюс. |