Подходит ли приложение со значком “в системном трее” для постоянно работающего планировщика, или мне следует создать службу Windows?

StackOverflow https://stackoverflow.com/questions/1425599

  •  07-07-2019
  •  | 
  •  

Вопрос

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

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

КСТАТИ, имейте в виду, я новичок в разработке C # с использованием Visual Studio Express.Также, если бы вы могли дать краткий обзор дизайна того, что вы рекомендуете, это было бы здорово для кого-то новичка в этом (например, если вы предлагаете сервис, означает ли это, что вам действительно нужно одно приложение для сервиса и другое приложение с пользовательским интерфейсом, которое выполняет настройку для сервиса?)

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top