Запустить приложение Windows Forms как службу? - PullRequest
5 голосов
/ 20 января 2009

У меня есть приложение Windows Forms, которое я написал, которое выполняет некоторый мониторинг входящей почты и базы данных. Клиент сообщил мне, что он должен запускаться каждый раз, когда сервер перезагружается. Позор мне, что я позволил клиенту изменить требования.

Я подумал ... есть ли способ заставить приложение Windows Forms работать как службу, чтобы оно запускалось автоматически?

Разъяснение

Я хотел бы попытаться не писать больше кода ... если возможно!

Ответы [ 8 ]

8 голосов
/ 21 января 2009

Запуск программ Windows из службы NT

Проверьте эту статью: http://www.codeproject.com/script/Articles/ArticleVersion.aspx?aid=719&av=49654

Это действительно старая статья, но она проработала 8 лет, и автор продолжает обновлять ее.

Он будет делать то, что вы хотите.

5 голосов
/ 21 января 2009

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

Если он может работать без присмотра, но может потребоваться его отключение и перезапуск вручную или его нельзя просто завершить при выключении, используйте XYNTService в соответствии с рекомендациями EnocNRoll . Это ужасный хак, но он будет работать на то, что вы хотите.

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

1 голос
/ 24 июля 2010

Вы также можете рассмотреть AlwaysUp , коммерческое приложение, которое будет запускать любое приложение в качестве службы Windows. Он похож на XYNTService (упомянутый EnocNRoll), но имеет больше функций и полностью поддерживается.

Удачи!

1 голос
/ 21 января 2009

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

0 голосов
/ 21 января 2009

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

0 голосов
/ 21 января 2009

Нашел статью под названием Как создать пользовательскую службу .

0 голосов
/ 21 января 2009

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

    protected override void OnStart(string[] args)
    {
                    Processor processor = new Processor();
        Thread workerThread = new Thread(processor.OnStart);
        workerThread.IsBackground = true;

        try
        {
            workerThread.Start();
        }
        catch
        {
                      //...
        }
    }
0 голосов
/ 20 января 2009

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

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

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