【问题标题】:How can I delay my created service in Windows Server 2003 & Windows XP?如何在 Windows Server 2003 和 Windows XP 中延迟我创建的服务?
【发布时间】:2014-03-28 10:51:28
【问题描述】:

我在很多天前创建了一项服务 (WinServiceProject),我希望它自动启动,但有一个延迟时间...我找到了一个解决方案,但这对我没有帮助:http://support.microsoft.com/kb/193888/en-us

我在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinServiceProject 修改了注册表,但这不起作用。

我之前添加了多字符串值 (DependOnService) 并设置了许多服务...这可行,但不喜欢我想要的。

随着时间的推移,我需要它的解决方案,设置很多时间并在此时间之后执行服务。如果我需要在我的服务中添加代码,我会这样做。

谢谢。

【问题讨论】:

  • 虽然不理想,但您可以考虑在服务代码中插入延迟,以防止其运行 n 秒。它需要在主服务线程上,而不是在调用OnStart() 的线程上,否则可能看起来服务没有成功启动。
  • Martin Parkin - 是的,我认为解决方案可能是在服务中添加一个代码,在该服务中我停止服务并设置“x”时间重新启动......制作重启功能。
  • @ManuelFdz,根据您的回复,我想知道您是否需要该服务继续每“x”分钟执行一次操作。对吗?
  • @AWinkle,不,我的服务只运行一次并向 SQL 发送一些数据......但我需要等待很多时间才能启动。
  • Thread.Sleep([你的时间以毫秒为单位]);

标签: c# windows service windows-server-2003 windows-xp-sp3


【解决方案1】:

我用这段代码解决了问题!!

public static void RestartService(string serviceName, int timeoutMilliseconds)

    {

        ServiceController service = new ServiceController(serviceName);

        try
        {
            int millisec1 = Environment.TickCount;
            TimeSpan timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds);

            service.Stop();
            service.WaitForStatus(ServiceControllerStatus.Stopped, timeout);

            // count the rest of the timeout
            //int millisec2 = Environment.TickCount;
            timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds - millisec1);

            service.Start();
            service.WaitForStatus(ServiceControllerStatus.Running, timeout);
        }

        catch
        {
            // ...
        }

    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    • 2016-06-20
    • 2015-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-26
    相关资源
    最近更新 更多