сервис окон по сравнению с запланированной задачей

Ошибка синтаксиса: ошибка синтаксиса, неожиданный T_XXX

Случается, когда в неожиданном месте есть T_XXX токен , несбалансированные (лишние) круглые скобки, использование короткого тега без его активации в php.ini и т. д.

Вопросы, относящиеся:

Для получения дополнительной помощи см .:

  • http://phpcodechecker.com/ - что дает более полезные объяснения ваших синтаксических проблем.

112
задан Jon Seigel 6 March 2010 в 04:59
поделиться

6 ответов

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

Оба решения могут запустить программу, когда пользователь не зарегистрирован, таким образом, никакое различие там. Запись сервиса несколько более включена, чем обычное настольное приложение, хотя - Вам, возможно, понадобится отдельный клиент GUI, который свяжется с сервисным приложением через TCP/IP, именованные каналы, и т.д.

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

11
ответ дан Marek Jedliński 24 November 2019 в 02:53
поделиться
  1. легче настроить и заблокировать вниз сервисы окон с корректными полномочиями.
  2. Услуги являются более "видимым" подразумевать что все (т.е.: techs), знает, где посмотреть.
4
ответ дан NotMe 24 November 2019 в 02:53
поделиться

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

запланированная задача А не требует, чтобы Вы изучили, как записать службу Windows.

4
ответ дан Mark Ransom 24 November 2019 в 02:53
поделиться

Почему бы не предоставить обоим?

В прошлом я поместил 'базовые' биты в библиотеку и обернул вызов ко Что. GoGoGo () в обоих сервис, а также консольное приложение.

С чем-то Вы исчерпываете каждые две минуты, разногласия достойны, это не делает очень (например, просто функция типа "ping"). Оберткам не придется содержать намного больше, чем вызов отдельного метода и некоторый вход.

2
ответ дан 24 November 2019 в 02:53
поделиться

Обновление:

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

Исходный ответ:

Я действительно не поклонник Windows Scheduler. Пароль пользователя должен быть указан как @moodforall , как указано выше, что забавно, когда кто-то меняет пароль этого пользователя.

Еще одним серьезным недостатком Планировщика Windows является то, что он работает в интерактивном режиме, а не в фоновом режиме. . Когда 15 окон MS-DOS появляются каждые 20 минут во время сеанса RDP, вы пинаете себя за то, что не установили их как службы Windows.

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

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

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

Затем вы читаете все советы в Интернете, где множество экспертов рассказывают вам, как это действительно плохая практика программирования:

http://msmvps.com/blogs/peterritchie/archive/2007/04/ 26 / thread-sleep-is-a-sign-of-a-weakly-design-program.aspx

Итак, вы почесываете в затылке и думаете про себя, блин, отменить отложенные проверки -> Да, я конечно -> Отменить всю сегодняшнюю работу ..... черт, черт, черт ....

Однако мне нравится этот шаблон, даже если все думают, что это чушь:

Метод OnStart для однопоточного подход.

 protected override void OnStart (string args) { Спать? Это позволяет мне позволить текущему потоку продолжать работать до тех пор, пока он не завершится, а затем наступит интервал паузы, поток перейдет в спящий режим и снова запустится через требуемое время. 

Затем вы читаете все советы в Интернете, где множество экспертов рассказывают вам, насколько это действительно плохая практика программирования:

http://msmvps.com/blogs/peterritchie/archive/2007/04/ 26 / thread-sleep-is-a-sign-of-a-badly-design-program.aspx

Итак, вы почесываете затылок и думаете про себя: WTF, Отменить отложенные проверки -> Да, я конечно -> Отменить всю сегодняшнюю работу ..... черт, черт, черт ....

Однако мне нравится этот шаблон, даже если все думают, что это чушь:

Метод OnStart для однопоточного подход.

 protected override void OnStart (string args) { Спать? Это позволяет мне позволить текущему потоку продолжать работать до тех пор, пока он не завершится, а затем наступит интервал паузы, поток перейдет в спящий режим и снова запустится через требуемое время. 

Затем вы читаете все советы в Интернете, где множество экспертов рассказывают вам, насколько это действительно плохая практика программирования:

http://msmvps.com/blogs/peterritchie/archive/2007/04/ 26 / thread-sleep-is-a-sign-of-a-badly-design-program.aspx

Итак, вы почесываете затылок и думаете про себя: WTF, Отменить отложенные проверки -> Да, я конечно -> Отменить всю сегодняшнюю работу ..... черт, черт, черт ....

Однако мне нравится этот шаблон, даже если все думают, что это чушь:

Метод OnStart для однопоточного подход.

 protected override void OnStart (string args) { поток засыпает и снова запускается через требуемое время. 

Затем вы читаете все советы в Интернете, где множество экспертов рассказывают вам, насколько это действительно плохая практика программирования:

http://msmvps.com/blogs/peterritchie/archive/2007/04/ 26 / thread-sleep-is-a-sign-of-a-badly-design-program.aspx

Итак, вы почесываете затылок и думаете про себя: WTF, Отменить отложенные проверки -> Да, я конечно -> Отменить всю сегодняшнюю работу ..... черт, черт, черт ....

Однако мне нравится этот шаблон, даже если все думают, что это чушь:

Метод OnStart для однопоточного подход.

 protected override void OnStart (string args) { поток засыпает и снова запускается через требуемое время. 

Затем вы читаете все советы в Интернете, где множество экспертов рассказывают вам, как это действительно плохая практика программирования:

http://msmvps.com/blogs/peterritchie/archive/2007/04/ 26 / thread-sleep-is-a-sign-of-a-badly-design-program.aspx

Итак, вы почесываете затылок и думаете про себя: WTF, Отменить отложенные проверки -> Да, я конечно -> Отменить всю сегодняшнюю работу ..... черт, черт, черт ....

Однако мне нравится этот шаблон, даже если все думают, что это чушь:

Метод OnStart для однопоточного подход.

 protected override void OnStart (string args) {

// Создаем рабочий поток; это вызовет WorkerFunction
 // когда мы его запускаем.
 // Поскольку мы используем отдельный рабочий поток, основной сервис
 // поток быстро вернется, сообщая Windows, что служба запущена
 ThreadStart st = новый ThreadStart (WorkerFunction);
 workerThread = новый поток (st);

 // установить флаг, чтобы указать, что рабочий поток активен
 serviceStarted = true;

 // запускаем поток
 workerThread.Start ();
}

Код создает отдельный поток и присоединяет наш рабочий функция к нему. Затем он запускает поток и позволяет событию OnStart завершено, чтобы Windows не считала, что служба зависла.

Рабочий метод для однопоточного подхода.

 /// 
/// Эта функция сделает всю работу
/// Как только он выполнит свои задачи, он будет приостановлен на некоторое время;
/// он будет повторять это до тех пор, пока служба не будет остановлена
/// 
private void WorkerFunction () {

// запускаем бесконечный цикл; цикл будет прерван только когда "serviceStarted"
 // flag = false
 while (serviceStarted) {

 // сделай что-нибудь
 // обработка исключений здесь опущена для простоты
 EventLog.WriteEntry ("Сервис работает",
 System.Diagnostics.EventLogEntryType.Information);

 // Уступать
 if (serviceStarted) {
 Thread.Sleep (новый TimeSpan (0, интервал, 0));
 }
 }

 // время завершить поток
 Thread.CurrentThread.Abort ();
}

Метод OnStop для однопоточного подхода.

 protected override void OnStop () {

 // флаг, чтобы остановить рабочий процесс
 serviceStarted = false;

 // даем немного времени, чтобы завершить любую незавершенную работу
 workerThread.Join (новый TimeSpan (0,2,0));
}

Источник: http://tutorials.csharp-online.net/Creating_a_.NET_Windows_Service%E2%80%94Alternative_1%3a_Use_a_Separate_Thread (мертвая ссылка)

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

48
ответ дан 24 November 2019 в 02:53
поделиться

Здесь некоторая дезинформация. Планировщик Windows отлично справляется с задачами в фоновом режиме без всплывающих окон и без пароля. Запустите его под учетной записью NT AUTHORITY \ SYSTEM. Используйте этот переключатель schtasks:

/ ru SYSTEM

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

РЕДАКТИРОВАТЬ

В зависимости от вашей ОС и требований самой задачи вы можете использовать учетные записи с меньшими привилегиями, чем Localsystem, с параметром / ru .

Из подробного руководства ,

/RU username

A value that specifies the user context under which the task runs. 
For the system account, valid values are "", "NT AUTHORITY\SYSTEM", or "SYSTEM". 
For Task Scheduler 2.0 tasks, "NT AUTHORITY\LOCALSERVICE", and 
"NT AUTHORITY\NETWORKSERVICE" are also valid values.

Планировщик заданий 2.0 доступен в Vista и Server 2008.

В XP и Server 2003 система является единственной вариант.

16
ответ дан 24 November 2019 в 02:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: