Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么';RequestAdditionalTime()方法在Vista/7中重启时是否有效?_C#_.net_Windows 7_Windows Services_Windows Vista - Fatal编程技术网

C# 为什么';RequestAdditionalTime()方法在Vista/7中重启时是否有效?

C# 为什么';RequestAdditionalTime()方法在Vista/7中重启时是否有效?,c#,.net,windows-7,windows-services,windows-vista,C#,.net,Windows 7,Windows Services,Windows Vista,我一直在对用C#.NET3.5编写的Windows服务进行广泛的测试。当我重新启动或关闭计算机时,我很难让Windows给我足够的时间让我的服务正常关闭,即使我正在调用RequestAdditionalTime()方法,该方法应该更新SCM并保持我的服务运行。但是,如果我手动停止服务,我的代码可以正常工作。我主要是在WindowsVista和Windows7中测试这段代码,在决定在WindowsXP中测试这段代码时,一切都运行得很好。有人知道为什么这个调用在Vista/7中不起作用吗?我想我需要

我一直在对用C#.NET3.5编写的Windows服务进行广泛的测试。当我重新启动或关闭计算机时,我很难让Windows给我足够的时间让我的服务正常关闭,即使我正在调用RequestAdditionalTime()方法,该方法应该更新SCM并保持我的服务运行。但是,如果我手动停止服务,我的代码可以正常工作。我主要是在WindowsVista和Windows7中测试这段代码,在决定在WindowsXP中测试这段代码时,一切都运行得很好。有人知道为什么这个调用在Vista/7中不起作用吗?我想我需要某种权限来防止系统关闭,这是我在Xp中默认获得的权限,但在Vista/7中没有。

如果系统没有关闭,您的服务可以请求额外的时间,并且您的进程不会被终止


如果系统正在关闭,您的服务必须关闭。你甚至没有得到正常的30秒服务通常得到。Shutdown比以前更强大。

在非Shutdown的情况下,必须比每2分钟调用RequestAdditionalTime()的频率更高:

    protected override void OnStop()
    {
        Thread.Sleep(60000);
        RequestAdditionalTime(180000);
        Thread.Sleep(60000);
        RequestAdditionalTime(180000);
        Thread.Sleep(5000);
    }

请注意,不管名称如何,时间参数都是请求的总关机时间。

是否有任何方法可以知道关闭或重新启动计算机时服务将关闭的时间?我知道WaitToKillServiceTimeout在W7中设置为12000,在Vista、Xp中设置为20000。但即使在W7或Vista中更改此值,也几乎没有效果。特别是在Windows7中,它会在几秒钟内启动您的服务。谢谢你的洞察力。我想没有办法知道。假设Windows允许13秒关闭所有服务。其他一些服务需要12秒的cpu时间(因此其他服务在此期间无法执行),最后关闭。剩下的就剩一秒钟了。Windows将要杀死他们。你有时间参数含义的参考吗?MSDN上没有列出它。@David:这是一年多以前的事了,但我记得这是我从测试中推断出来的。这在Windows 7中不起作用(不管它是在这里配置的)。此外,该示例没有清楚地说明更多的时间,因为默认值为120秒(此处),并且只显示约125秒的睡眠时间。