Как запустить длительный процесс в службе Windows? - PullRequest
2 голосов
/ 08 октября 2010

Может кто-нибудь дать мне знать, как запустить длительный процесс из службы Windows (в C #)? процесс может занять несколько часов, чтобы закончить. служба должна проверять базу данных на наличие ожидающих выполнения заданий. каждая работа может занять много времени, чтобы закончить. если нет ожидающих заданий, то он должен спать в течение 2 минут (настраивается), а затем начать снова. Как я могу сделать это с помощью службы Windows? Заранее спасибо.

Ответы [ 4 ]

3 голосов
/ 08 октября 2010

вам нужно создать консольные приложения примерно так

    static void Main(string[] args)

    {
       bool createdNew;
        Mutex m = new Mutex(true, "YourBatchProcessor", out createdNew);
        if (!createdNew)
        {
             Console.WriteLine("YourBatchProcesso is already running!");
            return;
        }
        //your code goes here

    }

и, как сказал Гмолив, создайте запланированные задания, а не выполняйте их каждые 2 минуты

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

   public class YourServrClass
   {

    private int numticks = 0;
    private Timer _timer;
    private bool _IsStarted;
    private int Interval =2000; //ticks //2 sec.
    #region Initializer
     public YourServrClass()
    {
        InitializeComponent();
        _timer = new Timer();
         _timer.Interval = Interval;
        _timer.Elapsed += new ElapsedEventHandler(this.Timer_Tick);
    }
    #endregion

    #region Timer_Tick to process

    private void Timer_Tick(object sender, System.Timers.ElapsedEventArgs e)
    {
        numticks++;
        if (_IsStarted)
        {
            _timer.Stop();

            //your code //ProcessYourData();
            _timer.Start();
        }
    }
    #endregion
    protected override void OnStart(string[] args) 
    { 
           _IsStarted=true;
    } 

    protected override void OnStop() 
    { 
          _IsStarted=false;
    } 

 }
1 голос
/ 08 октября 2010
  1. Создать новый проект «Служба Windows».
  2. Переопределите метод OnStart, чтобы создать поток. Эта нить будет обрабатывать опрос и обработку.
  3. Переопределите метод OnStop, чтобы установить флаг. Поток из шага 2 следит за этим флагом и завершает себя соответствующим образом.
  4. Открыть конструкторскую поверхность класса Сервис. Внизу окна «Свойства» находится ссылка «Добавить установщик». Нажмите на нее.
  5. Установите suervice с помощью InstallUtil или поместив его в пакет установщика.

Я постоянно пишу услуги, поэтому не стесняйтесь задавать мне дополнительные вопросы.

0 голосов
/ 08 октября 2010

Намного проще использовать запланированные задачи Windows, чем разрабатывать собственное приложение, вам стоит попробовать.

Если все работает не так, как вы ожидаете, как сказал Джей, уловки нет, просто помните, что нет графического интерфейса.

0 голосов
/ 08 октября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...