我一直在对我用C#.Net 3.5编写的Windows服务进行一些广泛的测试。我无法让Windows给我足够的时间让我的服务在我重新启动或关闭计算机时正常关闭,即使我正在调用RequestAdditionalTime()方法,它应该更新SCM并保持我的服务运行。如果我手动停止服务,我的代码可以正常工作。我主要是在Windows Vista和Windows 7中测试此代码,在决定在Windows XP中测试代码时,一切都运行得很好。有谁知道为什么这个电话在Vista / 7不起作用?我想我需要某种权限来防止系统在Xp中默认关闭,而不是在Vista / 7中。
答案 0 :(得分:6)
如果系统没有关闭,您的服务可以请求额外的时间,您的流程也不会被杀死。
如果系统正在关闭,您的服务必须关闭。您甚至无法获得服务通常获得的正常30秒。关机比以前更有力。
答案 1 :(得分:2)
在非关闭的情况下,必须比每2分钟更频繁地调用RequestAdditionalTime():
protected override void OnStop()
{
Thread.Sleep(60000);
RequestAdditionalTime(180000);
Thread.Sleep(60000);
RequestAdditionalTime(180000);
Thread.Sleep(5000);
}
请注意,尽管名称,时间参数是请求的总关闭时间。