任务:在 windows 系统中,将python 脚本设为开机自动启动,且后台运行,防止他人误操作。
有时候,为了省事,直接在窗口里运行 python foo.py
, 利用这个窗口进程,来提供某服务。但缺点就是,桌面上会有一个运行窗口,一旦被关闭,则服务进程就会退出。
最直观的解决方案就是将 foo.py
转换为 windows 服务,这样可以开机自启动,同时能够隐藏窗口,防止他人不小心关闭了这个进程。
需要的工具有三个:
- BatToExeConverter 软件,用来将.bat 脚本转换为 exe 程序。
- instsrv.exe,用来添加系统服务。
- srvany.exe,服务外壳,通过它,让我们的 exe 以服务的方式启动。
步骤有四步:
- 将
python foo.py
写入文本文件,并保存为foo.bat
. - 通过 BatToExeConverter 将
foo.bat
转换为foo.exe
. - 用管理员权限运行命令
instsrv.exe foo_service "D:\test\script_to_service\srvany.exe"
这样,服务列表里就有了名为 foo_service
的服务外壳。
- 配置注册表,让服务外壳关联到我们的
foo.exe
. 具体做法如下:
打开注册表编辑器
定位到:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\foo_service
一般情况下该服务名下没有 Parameters
项目,需要手动建立:
对服务名称项目右击新建项,名称为 Parameters
,然后定位到 Parameters
项,新建以下几个字符串值。
- 名称
Application
值为你要作为服务运行的程序地址
。 - 名称
AppDirectory
值为你要作为服务运行的程序所在文件夹路径
。 - 名称
AppParameters
值为你要作为服务运行的程序启动所需要的参数
。
也可以用命令行完成上述操作:
REG ADD HKLM\SYSTEM\CurrentControlSet\Services\foo_service\Parameters
REG ADD HKLM\SYSTEM\CurrentControlSet\Services\foo_service\Parameters /v Application /t REG_SZ /d D:\test\script_to_service\foo.exe
然后就可以愉快的使用windows服务管理了。
网友评论