Win开机自启动¶
- 登录后自启动
将快捷方式或脚本或程序等放到此目录下: shell:startup C:\Users\wly\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
- 快速启动问题
自己写的服务,每次关机后再开机之后自启动不了,但是每次重启后就会自启动。 最后发现是因为Windows10默认开启了快速启动,关机时将服务的状态保存了文件,开机启动后服务并不会真正意义的重新启动, 也就是说,如果开机后,你的服务是运行的,那你关机开机或重启后,服务还是会自启动的; 但是如果开机后,你把服务停止了,然后关机,再开机后,服务就不会自启动了(如果是重启是会自启动的),因为“快速启动” 保存了关机时服务状态。 关闭快速启动: “设置”-》系统-》电源和睡眠-》其他电源设置-》选择电源按键的功能-》更改当前不可用的设置 将“启用快速启动(推荐》”前面的勾去掉。 附:快速启动原理:系统将关机前的状态保存到c盘根目录下的 hiberfil.sys 文件(该文件为隐藏文件,使用Everything工具可以搜索到)中,开机时从这个文件恢复状态,这个文件比较大,至少有好几个GB.
- 登录前自启动:添加计划任务方式
taskschd.msc 添加一个计划任务
上面的方式需要输入当前用户的密码,如果不想输入密码可以将“运行任务时,请使用下列用户账户”改为“SYSTEM”用户:schtasks /create /tn "TEST123" /tr "C:\Path\To\Your\Script.bat" /sc onstart /ru "SYSTEM" /rl highest /delay 0001:00 /F
- 登录前自启动:组策略方式
gpedit.msc 在“启动”里添加一个启动脚本或程序等
- 登录前自启动:服务方式
AnyExeToService工具方式(图形化简单,直接双击exe即可,不详细介绍,推荐该方式):https://github.com/cxwl3sxl/AnyExeToService instsrv.exe和srvany.exe工具方式(操作复杂,详细介绍): https://blog.csdn.net/gitblog_00289/article/details/142156340 https://zhuanlan.zhihu.com/p/616058216 1)创建服务:D:\test\instsrv.exe CCServer D:\test\srvany.exe 2)操作注册表:HKEY_LOCAL_MACHINE->SYSTEM->CurrentControlSet->Services->CCServer a)创建项:reg add "HKLM\System\CurrentControlSet\Services\CCServer\Parameters" b)在项下面创建值: reg add "HKLM\System\CurrentControlSet\Services\CCServer\Parameters" /v Application /t REG_SZ /d "C:\Users\wly\Desktop\test\test.bat" /f reg add "HKLM\System\CurrentControlSet\Services\CCServer\Parameters" /v AppDirectory /t REG_SZ /d "C:\Users\wly\Desktop\test" /f reg add "HKLM\System\CurrentControlSet\Services\CCServer\Parameters" /v AppParameters /t REG_SZ /d "" /f 3)启动服务:net start CCServer 4)停止服务:net stop CCServer 5)删除注册表: reg delete "HKLM\System\CurrentControlSet\Services\CCServer\Parameters" /v AppParameters /f reg delete "HKLM\System\CurrentControlSet\Services\CCServer\Parameters" /v AppDirectory /f reg delete "HKLM\System\CurrentControlSet\Services\CCServer\Parameters" /v Application /f reg delete "HKLM\System\CurrentControlSet\Services\CCServer\Parameters" /f 6)删除服务: instsrv.exe CCServer remove sc delete CCServer services.msc regedit
- 其它工具
nssm
sc(windwos自带)
WinSW - ToDesk服务示例
- sc创建服务(未测试通过)
sc create MyService binPath= "C:\Users\wangliuyuan\Desktop\taizhou328\dist\MyService.bat" start=auto sc start MyService sc stop MyService sc delete MyService 报错: sc start MyService [SC] StartService 失败 1053: 服务没有及时响应启动或控制请求。
- 编译python程序为服务
pip.exe install pywin32
import win32serviceutil import win32service import win32event import servicemanager import time import datetime class TZ328Service(win32serviceutil.ServiceFramework): _svc_name_ = "TZ328Service" _svc_display_name_ = "TZ328Service" _svc_description_ = "TZ328Service." def __init__(self, args): win32serviceutil.ServiceFramework.__init__(self, args) self.stop_event = win32event.CreateEvent(None, 0, 0, None) self.running = True def SvcStop(self): self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) win32event.SetEvent(self.stop_event) self.running = False def SvcDoRun(self): servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE, servicemanager.PYS_SERVICE_STARTED, (self._svc_name_, '')) self.main() def main(self): while self.running: current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") # 写入文件 with open(r"C:\Users\wangliuyuan\Desktop\taizhou328\dist\1.txt", "a") as f: f.write(current_time + "\n") time.sleep(5) if __name__ == '__main__': win32serviceutil.HandleCommandLine(TZ328Service)
python.exe main.py install python.exe main.py start python.exe main.py stop python.exe main.py remove