系统启动时延迟服务

时间:2009-02-15 16:08:49

标签: c# vb.net multithreading windows-services service

我正在使用VB 9。

我希望Windows服务中的唯一线程(设置为自动)在Windows启动5分钟后开始工作。

但是如果用户手动重启服务,则线程应该在服务启动时立即开始工作。

我如何实现这一目标?

3 个答案:

答案 0 :(得分:1)

我不相信这种类型的操作有明确的支持。但是你可以创造一个足够好的解决方案。

如果您的服务设置为自动启动,则可以安全地假设第一个StartUp用于系统启动。任何后续启动都是用户采取特定操作导致服务重新启动的结果。您可以使用这两个项来构建解决方案。

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

答案 1 :(得分:1)

您可以查看System.Environment.TickCount以查找自Windows启动以来的时间,如果时间低于5分钟,请等待剩余时间。

(请注意,TickCount可能会溢出。如果您担心这一点,请使用非托管GetTickCount64 API。)

答案 2 :(得分:1)

你为什么需要这样做?我的猜测是你试图解决依赖问题,而不是正确解决问题。

如果你确实需要这样做,那么oefe是在正确的轨道上虽然我建议使用System - System Up Time性能计数器,以避免整数溢出问题。另外,不要在OnStart方法中休眠,而是设置一个计时器以在适当的延迟后开始工作或立即启动工作线程,并将延迟放在工作线程中,而不是在OnStart线程中。