2009-04-13 5 views
3

я 3 службы Windows Вопросслужбы Windows Вопрос

  1. ли WS может работать в фоновом режиме? Можно ли выполнять какую-то работу каждые 2 минуты? (если да, могу ли я помочь?)

  2. Как установить WS простым способом? (не с Installutil.exe .......)

  3. Как я могу запустить .exe-файл из службы Windows?

Я пробовал так:

System.Diagnostics.Process G = new Process(); 
    G.StartInfo.FileName = @"d:\demo.exe"; 
    G.Start(); 

, но это не сработало.

ответ

2
  1. Да, служба windows может и работает в фоновом режиме. Для выполнения одной и той же работы каждые 2 минуты используйте класс system.Timer и помещайте свой код в событие onElapsed. Недавно я создал этот тип сервиса и обнаружил, что вы можете использовать два типа таймера, убедитесь, что вы используете правильный, или вы не найдете событие onElapsed.

  2. Я не пробовал установку без InstallUtil.exe, но у меня есть .bat-файл, который я использую, который запускается как часть моей основной установки приложения.

Ваш последующий вопрос о запуске в EXE-файл из службы Windows, чтобы запустить exe-файл из службы Windows я использовал:

Process p = new Process(); 
p.StartInfo.WorkingDirectory = @"C:\"; 
p.StartInfo.FileName = @"C:\demo.exe"; 
p.StartInfo.CreateNoWindow = true; 
p.Start(); 
p.WaitForExit(); 

Помните, что исполняемый файл будет работать на тот же уровень, что и сервис, что означает, что он не может отображать что-либо на рабочем столе. Если вы ожидаете увидеть любое открытое окно или файл .exe потребует ввода любого пользователя, тогда вы будете разочарованы, и .exe может ждать неопределенно долго. (Я нашел эту ссылку Launch external programs помог и есть также этот вопрос на SO - Launching an Application (.EXE) from C#)

6
  • Да, используйте Timer класс (example)

  • В чем проблема с Installutil.exe? Если вам это не понравилось, сгенерируйте установщик с VS.NET, но installutil.exe он всегда на заднем плане, насколько мне известно. (Complete example 1, Complete example 2)

4

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

Это означает, что класс System.Threading.Timer должен хорошо работать для запуска таймера, который выполняется на регулярном интервале.

Что касается установки, вы должны использовать Installutil.exe - это стандартный способ установки службы Windows.

Я рекомендую взглянуть на this codeproject article. Он имеет хороший, чистый шаблон, который вы могли бы использовать. Кроме того, есть пример командного файла, который упрощает использование Installutil, что может сделать его «приятнее» для вас.

2

Если вы разрабатываете VS2008, у вас есть шаблон для создания служб Windows.

В принципе, вы создадите таймер (System.Windows.Timers.Timer), выполните инициализацию в методе OnStart, очистите и завершите работу над методом OnStop и инициализируйте таймер (OnStart или с помощью OnCommand)

вы можете посмотреть на это для basic example или здесь, для примера с timers

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

1

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

Here is an older article describing sc.exe's use. Кроме того, просто запуск sc из командной строки покажет возможные команды.

0

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