Задержка сервиса при запуске системы - PullRequest
1 голос
/ 15 февраля 2009

Я использую VB 9.

Я хочу, чтобы единственный поток в моей службе Windows (настроенный на автоматический) начал свою работу через 5 минут после запуска Windows.

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

Как мне этого добиться?

Ответы [ 3 ]

1 голос
/ 15 февраля 2009

Вы можете посмотреть на System.Environment.TickCount , чтобы найти время с момента запуска Windows, и если оно меньше 5 минут, оставайтесь в покое в течение оставшегося времени.

(Помните, что TickCount может переполниться. Используйте неуправляемый GetTickCount64 API, если это вас беспокоит.)

1 голос
/ 16 февраля 2009

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

Если вам действительно нужно это сделать, тогда oefe находится на правильном пути, хотя я бы рекомендовал использовать счетчик производительности System - System Up Time, чтобы избежать проблемы целочисленного переполнения. Кроме того, не спите в методе OnStart, а установите таймер для запуска вашей работы после соответствующей задержки или немедленно запустите рабочий поток и поместите задержку в рабочий поток, а не в поток OnStart.

1 голос
/ 15 февраля 2009

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

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

Public Class MyService 
  ...
  Private m_first as Boolean = True

  Protected Overrides Sub OnStart(args as String()) 
    If m_first Then
      m_first = False
      Thread.Sleep(TimeSpan.FromMinutes(5))
    End If

    ActuallyStart()
  End Sub
End Class
...