![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Gleb |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 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? Где размещать сами настройки? Может быть у вас есть своя собственная схема подобного проекта, поделитесь пожалуйста. Так же приветствуются ссылки на информацию такого рода. |
|||
|
||||
| unicuum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 830 Регистрация: 16.3.2005 Где: Рашка Репутация: 1 Всего: 8 |
Делаешь точку входа в приложение и получаешь ей сразу аргументы, дальше парсишь.
Например: установка: -i удаление: -u старт: -s пауза: -p рестарт: -r Ну и так далее. Далее без аргументов вызываешь форму функцией Run класса Application, в общем стандарт. А если аргументы есть и они распознаваемы, то работаешь с классом службы. И то и другое может использовать весь твой функционал программы, тут разница лишь в том, как ты создаешь процесс. Загружать ли два экземпляра программы, то есть когда служба работает, или надо ли запускать программу в режиме виндоус приложения или наоборот решать тебе. Так же как надо ли проводить автоматическое переключение между ними или не надо. Нет, не нужно, но решать тебе. Во всяком случае те проекты, которые я смотрел и которые имеют два в одном, то есть эксишку со службой и приложением внутри, так не делают. Лучше всего в папке с программой, я бы сделал xml файл настроек и писал туда, но ты опять же можешь делать как тебе вздумается. Прочитай книгу про создания виндовых служб, с приложениями думаю и так всё ясно. Почитай МСДН.
Визард это отдельный проект в том же решении, не думаю, что это уж так важно, но думаю проблем у тебя особых не будет. Этим можно заняться и под конец. О том как делать визарды тоже читай или в книжках или в МСДН, в книжках это обычно в последних главах идёт. -------------------- ![]() обычный день на винграде |
|||
|
||||
| unicuum |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 830 Регистрация: 16.3.2005 Где: Рашка Репутация: 1 Всего: 8 |
Не так. Суть программирования не в том чтобы подстраиваться под чьи-то решения. Ты сам творец своих программ и можешь воплотить любую задумку. Предположим ты решил, что тебе нужна такая служба, которая при активации процесса считывает настройки из файла и так до конца с ними и работает. Естественно после этого вынужден будешь делать перезагрузку службы после того как каким-нибудь способом внесёшь необходимые изменения в файл конфигурации. По мне это не самый лучший вариант, не проще ли управлять настройками на лету? Прочитай про "Домены приложений" в дотнете, тебе многое станет понятно. С принципиальной точки зрения для программистов, между виндовым приложением и виндовой службой нет никакой разницы. Да они запускают свои процессы с помощью разных классов и разными методами, но на этом все различия и заканчиваются. Даже веб-приложения и веб-службы в этом смысле не отличаются от них слишком сильно, но они хотя бы немного отличаются, а тут вообще одно и тоже. Вот что тебе в первую очередь необходимо помнить. В System.Windows.Forms есть класс Application. Внимательно посмотри находящиеся в нём методы. И посмотри так же System.ServiceProcess.ServiceBase. В обоих проектах Output Type - Windows Application, различия начинаются лишь внутри, как правило с точки входа в приложения. Пример точки входа Windows Application
Пример точки входа Windows Services
А дальше идёт обычная работа с данными и так далее. И уже тебе решать, нужен ли службе GUI или не нужен и прочее. По идее ты бы мог чуточку переработать код точки входа в приложение и сделать для программы кнопочку, которая бы автоматически переводила его в режим службы в режим приложения и обратно. И когда оно в режиме службы, чтобы тебе GUI не мешался, мог бы поместить его в трей (первый попавшийся поиском пример). У тебя сейчас скорее психологическое ограничение стоит, так как ты не знаешь всех возможностей дотнета. Лично мне думается, что проще всего прерывать из главной формы текущий процесс, когда находимся в режиме приложения. И то же самое касается режима службы, только там это делается по другому. А в точке входа сделать замкнутый цикл, который будет работать и активировать то одно, то другое, пока пользователь точно не захочет выйти из программы. Настройки уже сказал, в режиме приложения и так понятно как менять, а в режиме службы запихнуть вызов форм в трей, тем более что формы в обоих режимах одни и те же, просто запускаются в разных процессах. -------------------- ![]() обычный день на винграде |
||||
|
|||||
| Gleb |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 11.6.2005 Репутация: 1 Всего: 1 |
Спасибо, теперь стало намного понятнее. Кармы не хватает, так бы с удовольствием поставил плюс.
|
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |