Преимущества консольного приложения над окнами
У меня есть .Net консольное приложение, которое с помощью запланированного события запустится, вызовите метод сервиса mweb и закройте. Это работает каждый час/каждый день. Хотя нет ничего "неправильного" в реализации, мне было интересно, есть ли какая-то польза для реализации этого как службы Windows.
Есть ли у кого-нибудь какие-либо взгляды на то, что было бы лучшим в этом случае?
Ответы
Ответ 1
Я обнаружил, что службы Windows трудно отлаживать, поэтому я стараюсь использовать их только тогда, когда:
(A) То, что я делаю, довольно сложно или
(B) должно выполняться все время (пример: мониторинг чего-либо для изменений)
Я нахожу, что большинство вещей обычно можно выполнить с помощью Консольного приложения с некоторыми командами командной строки и Планировщиком Windows.
Ответ 2
Служба отличается от приложения тремя способами:
- Он запускается без входа пользователя в систему
- У него не может быть никакого пользовательского интерфейса (консоль также является интерфейсом)
- Он может работать под повышенными правами (учетная запись SYSTEM) и, таким образом, выполнять действия, которые не разрешены для пользователей.
Вопросы, которые нужно задать здесь: Вам нужны различные варианты, которые может дать вам услуга? Если ответ отрицательный, то не используйте службу.
Я исхожу из вашего вопроса, что вам нужно фоновое приложение без какого-либо пользовательского интерфейса (пункт 2 выше). Кажется, вам не нужны элементы 1 или 3. Вы можете получить чистое фоновое приложение без какого-либо окна (консоли или еще), не создавая его. Просто создайте простое приложение Windows и измените
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
к
static class Program
{
[STAThread]
static void Main()
{
// Application.EnableVisualStyles();
// Application.SetCompatibleTextRenderingDefault(false);
// Application.Run(new Form1());
DoWhateverYouWant();
}
}
О да, и Крис полностью прав насчет отладочных услуг, которые являются настоящей болью!
Ответ 3
Я думаю, что то, что вы сделали, - это лучшая практика. Ничто не ненавидит больше, чем приложения, которые добавляют свои собственные услуги, чтобы делать что-то незначительное периодически. С обновленной интеграцией журнала событий/планировщика задач в > Vista даже меньше приложений действительно нужна услуга, и если они это делают, это может быть по запросу.
Вы делаете мир лучше.
: -)
О, и, будучи консольным приложением, он делает так, чтобы вы могли легко запускать его вручную, если это необходимо, что отлично подходит для отладки.
Чтобы уточнить: продолжайте, вы делаете это правильно.
Ответ 4
Пособие: если ваш компьютер перезагружается (т.е. сервер), вам не нужно входить в систему, чтобы снова начать работать.
Я согласен, что отладка служб Windows SUCKS! Это ужасно, и MS действительно должна решать возможность отладки службы.
Однако... есть некоторые бесплатные инструменты, которые значительно облегчают процесс. У Anderson Imes есть хорошая утилита, которая позволяет записывать службы Windows так же, как писать консольное приложение даже во время цикла отладки.
Проверьте его утилиты для отладки служб в http://theimes.com/files/
Наилучшая часть его реализации заключается в том, что это 1-строчное изменение в вашем коде, что вы можете легко управлять с помощью параметра #if DEBUG, если вы не хотите, чтобы его библиотека была в вашем экземпляре.
Ответ 5
Существует простейшее решение для отладки служб. Вы создаете комбинированное консольное/сервисное приложение.
Вы проверяете какой-либо аргумент командной строки (например, -debug), а затем выполняете свой код OnStart, ждите нажатия клавиши, выполняйте код OnStop.
Я использую тот же метод, чтобы доказать интерфейс для установки, удаления, запуска и остановки моего сервиса из одного и того же EXE.
Ответ 6
Важно помнить, что в консольных приложениях поддерживается пространство имен System.Drawing, что означает, что вы можете печатать. Это работает в Windows Services, но не поддерживается и не является полностью стабильным.
Ответ 7
Нельзя отрицать две точки из Криго и 3 точки от treb. Но я обнаружил, что SQL Server Agent 05/08/R2 является очень надежным и полезным планировщиком задач. Он более надежный, чем расписание задач Windows, и вы не должны беспокоиться о правах пакета или о регистрации пользователя.
У меня есть фоновая системная программа, которая выполняется каждые 2 минуты через агента SQL Server. Я решительно решил преобразовать его в службу Windows, но я не могу это оправдать.
Хотя в другой ситуации весы можно было легко опрокинуть.
Ответ 8
Это не ваш вопрос, но я обычно делаю комбинацию из двух подходов.
Я использую консоль для целей отладки и службу Windows, которая имеет одну и ту же библиотеку и правила.