- 登录后自启动
将快捷方式或脚本或程序等放到此目录下:
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