Хорошо ли приложение с иконкой в ​​системном трее для постоянно работающего планировщика, или я должен создать службу Windows? - PullRequest
0 голосов
/ 15 сентября 2009

Требование - у меня есть периодическое задание, которое я хочу запустить в среде Windows для своего приложения. Он будет иметь простой интерфейс, который позволяет выполнять некоторые базовые настройки (например, URL-адреса и частоту его запуска). Я хочу, чтобы он работал каждые X часов (настраивается), когда машина работает.

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

ПУТЬ - я новичок в C #, разрабатываю с использованием Visual Studio Express, имейте в виду. Также, если вы могли бы дать краткий обзор дизайна того, что вы рекомендуете, это было бы хорошо для кого-то новичка в этом (например, если вы предлагаете услугу, означает ли это, что вам действительно нужно одно приложение для службы и другое приложение, которое имеет пользовательский интерфейс, который делает настройку для службы?)

Ответы [ 7 ]

3 голосов
/ 15 сентября 2009

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

3 голосов
/ 15 сентября 2009

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

1 голос
/ 15 сентября 2009

Я разработал такое приложение в прошлом году. Простое приложение Windows Forms с иконкой в ​​трее. Пользователь может настроить приложение через контекстное меню (отображается, когда пользователь щелкает правой кнопкой мыши значок в трее). Я использовал таймер, который запускает событие Elapsed ...

Если это приложение будет единственным, выполняющим некоторые задачи своевременно, тогда просто используйте приложение Windows Form с иконкой в ​​трее. Но если будет несколько возможных приложений, которые могут отправлять ввод и инициировать некоторую активность, то вам следует рассмотреть возможность перемещения общих функций в службе Windows. Вам также следует рассмотреть возможность использования службы Windows, если приложение будет работать на компьютере со службами терминалов (несколько пользователей -> несколько экземпляров вашего приложения).

Я бы не использовал запланированное задание! Это менее удобно для пользователя ...

- Павел Николов

0 голосов
/ 15 сентября 2009

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

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

0 голосов
/ 15 сентября 2009

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

Что будет делать сервис в «мертвое время» между загрузками? Если ответ ничего не значит, тогда запланированное задание почти наверняка верно. Вы хотите создать консольное приложение для запуска в качестве запланированной задачи.

Было бы полезно, если бы мы знали больше о том, что, если таковые имеются, интерфейс пользователя используется.

0 голосов
/ 15 сентября 2009

Зависит от размера приложения. Если он совсем маленький, оставьте его в трее, если вы еще не написали это решение

0 голосов
/ 15 сентября 2009

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

...