2010-04-08 3 views
0

У меня есть странное приложение для разработки и тестирования. Мне нужно приложение форм Windows, чтобы я мог следить за тем, что он делает. Для производства приложение будет запущено из службы и не будет видимого интерфейса. Я действительно не хочу переписывать приложение. как только он будет завершен в консольное приложение, поэтому я хотел бы оставить его как есть, но запустить его из службы.Запуск приложения Windows Forms. от службы

Мой вопрос будет ли это приложение работать отлично от службы? На данный момент у него есть элементы пользовательского интерфейса, и я смог успешно запустить приложение из службы, используя класс Process (System.Diagnostics).

Возможно, что-нибудь пойдет не так с этим подходом?

ответ

1

Я думаю, что проблем нет.

Если приложение представляет собой консольное приложение, вы можете контролировать видимость только с помощью конфигурации. Теперь вам нужно иметь другое приложение (Winform), чтобы сделать то же самое.

1

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

+0

Привет Крис, да, я согласен, однако в этом случае вы можете представить приложение как копию файла или что-то в этом роде. Когда-то в производстве он не нуждается в мониторинге - просто огонь и забудем. Но в dev. Я хочу, например, посмотреть, какие файлы получают копии в пользовательском интерфейсе (это просто пример на самом деле). – Remotec

0

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

2

Используйте диспетчер конфигурации для создания сборки gui и сборки службы для вашего приложения, а затем используйте следующую структуру, чтобы контролировать способ запуска вашего приложения :

#ifdef GUI 
    // load gui 
#else 
    // run as service 
#endif 
+0

Это то, что я обычно делаю и в такой ситуации. Обратите внимание, что это не имеет особого значения: если вы не начнете вводить модальные диалоги в свою службу (в этом случае пользователь может получить уведомление в соответствии с R2/7), вы можете с радостью создавать и запускать свои формы окон из контекста службы , Не создавать форму, если она работает в контексте сервиса, - это небольшой шаг экономии ресурсов. – Stephane

0

Вам нужно будет настроить значение Type поля в реестре SYSTEM\CurrentControlSet\Services\YourServiceName реестра. См. this article.

Как примечание стороны; услуги не должны работать так - они должны быть полностью в фоновом режиме.

Лучше было бы представить какой-то внешний API управления, возможно, например, через сетевые сокеты. И тогда у вас может быть приложение для отдельных окон, запущенное в системном трее, или в режиме Hide, и каждый раз, когда он получает что-то от службы, появляется всплывающее окно.

Смежные вопросы