看到了DelayedAutoStart和AutoStartDelay有关的很多文档,没有一篇是正确的
有的说AutoStartDelay单位是毫秒,比如:
有的说AutoStartDelay单位是秒,比如:
https://knowledge.broadcom.com/external/article/29374/how-to-increase-the-default-delay-of-120.html
有的说AutoStartDelay对2016/2019/2022不起作用,比如:
结合本人实践,同步结论如下:
1、windows系统默认的延迟启动时间是120秒(考虑到服务启动有depend,实际延迟启动的时间是大于这个的)
Start then auto-delay service, the default delay is120 seconds, but it can be overridden by the creating an AutoStartDelay value in HKLM\SYSTEM\CurrentControlSet\Control
2、延迟启动的全局配置项是HKLM\SYSTEM\CurrentControlSet\Control下的AutoStartDelay(单位是毫秒,不是秒),无法在单个服务级别设置延迟时间,也就是说并不存在单个服务级别的AutoStartDelay
像下图这种是错误的
比如设置240秒延迟,需要按240000毫秒赋值,应该这样操作:
AutoStartDelay value in HKLM\SYSTEM\CurrentControlSet\Control
Dword, could be 0 above
reg add "HKLM\SYSTEM\CurrentControlSet\Control" /v "AutoStartDelay" /d 240000 /t REG_DWORD /f
3、对单个服务来说,AutoStartDelay生效的前提是DelayedAutoStart为1,如果DelayedAutoStart为0,即便你用sc.exe config servicename start= delayed-auto配置延迟启动也不起作用,因为DelayedAutoStart为0的情况下,重启机器后对应服务会变成start= auto。
DelayedAutoStart value in HKLM\SYSTEM\CurrentControlSet\Services\<servicename>
Dword, could be 0 or 1.
以上验证我专门整了非常方便的demo来观测,把下面的压缩包解压放到C盘根目录,然后执行下面的命令,然后重启机器等5分钟左右在C:\addservice\ 目录看test.txt里5秒一次的时间戳,跟系统的启动时间做对比,执行如下powershell命令查看系统启动时间
13代表关机
6006代表系统日志停止记录
12代表开机
6005代表系统日志开始记录
powershell命令行执行如下代码查看系统启动时间:
Get-WinEvent -FilterHashtable @{logname='System';id=@(12,13,6005,6006,6008,41,1074);StartTime=(Get-Date).AddDays(-1) } | Where-Object {$_.ProviderName -eq "Microsoft-Windows-Kernel-General" -or $_.ProviderName -eq "User32" -or $_.ProviderName -eq "EventLog" } |Sort-Object -Property TimeCreated
cmd命令行执行如下代码添加服务:
sc.exe create demo binpath= "C:\addservice\srvany.exe" start= auto displayname= "demo"
reg add "HKLM\SYSTEM\CurrentControlSet\Services\demo\Parameters" /v "AppEnvironment" /t reg_multi_sz /d "temp=C:\Windows\temp;\0PATH=C:\addservice;C:\Windows;C:\Windows\System32;\0" /f
reg add "HKLM\SYSTEM\CurrentControlSet\Services\demo\Parameters" /v AppDirectory /t REG_SZ /d "C:\addservice" /f
reg add "HKLM\SYSTEM\CurrentControlSet\Services\demo\Parameters" /v Application /t REG_SZ /d "C:\addservice\demo.exe" /f
reg add "HKLM\SYSTEM\CurrentControlSet\Services\demo\Parameters" /v AppParameters /t REG_SZ /d "" /f
sc.exe config demo depend= ""
sc.exe description demo "本软件作为服务置于后台时有个功能'每5秒钟打印一次时间戳'。这个Demo的作者特别棒,特意在title上写清了'我是WinForm,也是Windows服务'。demo.exe作为服务,会在demo.exe同目录下产生一个.txt文件,每5秒打印一下时间戳。demo.exe的代码参考:https://www.cnblogs.com/micro-chen/p/5885899.html、https://www.cnblogs.com/ldjbase/p/5405262.html。链接里第三个方案的下载压缩包里的srvany.exe才是ok的,这个srvany.exe是13KB,比8KB的srvany.exe更好一些。"
sc.exe config demo start= delayed-auto
reg add "HKLM\SYSTEM\CurrentControlSet\Control" /v "AutoStartDelay" /d 240000 /t REG_DWORD /f
reg add "HKLM\SYSTEM\CurrentControlSet\Services\demo" /v "DelayedAutoStart" /d 1 /t REG_DWORD /f
reg add "HKLM\SYSTEM\CurrentControlSet\Services\demo" /v "AutoStartDelay" /d 60000 /t REG_DWORD /f
如下图,我配置的全局240秒,但给单个服务加的60秒(实际我前面说了,单个服务级别无法添加延迟时间,这里添加就是为了验证是否起作用),实测结果就是单个服务级别添加的延迟时间不起作用。
第三方方案控制单个程序延迟启动:http://www.rjlsoftware.com/software/utility/delayexec/
delayexec.exe "C:\Windows\System32\notepad.exe" 3
delayexec.exe "C:\Windows\System32\notepad.exe" 3 -max
delayexec.exe "C:\Windows\System32\notepad.exe" 3 -min
Example: delay.exe "C:\Program Files\Microsoft Office\Office\OUTLOOK.EXE" 60 -max
The example above would delay 60 seconds before launching Outlook, maximized.
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有