Windows 添加自定义服务实现开机(用户登录之前)自动运行 Python 脚本

实现效果

使用 Python 编写的一个脚本, 希望在 Windows 系统启动时, 用户登录之前就自动运行.

准备工作

首先确保 Python 脚本可以手动正常运行, 演示起见, 编写下面的一个简单的脚本用于在 C 盘根目录中生成一个包含脚本运行时间戳的文本文件. Python 脚本存放在 C:\Python_Scripts\demo.py, 内容如下:

python 复制代码
from datetime import datetime

if __name__ == "__main__":
    with open("c:/result.txt", "w", encoding="utf8") as file:
        file.write(f"{datetime.now()}")

    print("Script finished.")

手动运行测试正常:

创建自定义 Windows 服务

之前手动执行脚本时直接运行了 python, Windows 会自动从系统环境变量的 PATH 去寻找对应的可执行程序, 做成服务的时候, 最好还是用可执行程序的完整绝对路径, 例如: C:\Users\Administrator\AppData\Local\Programs\Python\Python312\python.exe. 如果是 Virtual Environment (venv) 的 Python 环境, 那就自己从资源管理器里面找到对应路径手动拼出来吧. 以管理员身份打开 PowerShell:

powershell 复制代码
# 配置要执行的动作
$action = New-ScheduledTaskAction -Execute "C:\Users\Administrator\AppData\Local\Programs\Python\Python312\python.exe" -Argument "C:\Python_Scripts\demo.py"

# 配置触发规则, 每次系统启动时
$trigger = New-ScheduledTaskTrigger -AtStartup

# 配置任务将会以 Administrator 账户身份运行, 实现无需等到用户登录之后再触发
$principal = New-ScheduledTaskPrincipal -LogonType S4U -UserId "Administrator"

# 注册计划任务
Register-ScheduledTask -Action $action -Trigger $trigger -Principal $principal -TaskName "My task at system startup." -Description "This task should start before user log on."

测试

关闭 Windows 系统后再次启动, 等待几分钟后再使用 RDP 远程登录, 检查 C: 盘根目录下面成功生成了 result.txt 文件, 检查文件内容记录的时间戳, 比当前登录的时间要早几分钟, 表明确实是在系统启动的时候就自动执行了, 而不是用户登录后才触发.

相关推荐
YSF2017_33 分钟前
C语言-12-静态库制作
c语言·开发语言
思绪无限26 分钟前
YOLOv5至YOLOv12升级:快递包裹检测系统的设计与实现(完整代码+界面+数据集项目)
人工智能·python·深度学习·目标检测·计算机视觉·快递包裹检测
凤凰院凶涛QAQ34 分钟前
《C++转JAVA快速入手系列》:基本通用语法篇
java·开发语言·c++
zjun100137 分钟前
QT:语言翻译
开发语言·qt
千寻girling38 分钟前
机器学习 | 逻辑回归 | 尚硅谷学习
java·人工智能·python·学习·算法·机器学习·逻辑回归
Shadow(⊙o⊙)1 小时前
C++常见错误解析2.0
开发语言·数据结构·c++·后端·学习·算法
永远不会的CC1 小时前
研0上岸找实习面试经历
python·算法·面试
谢谢 啊sir1 小时前
L2-057 姥姥改作业 - java
java·开发语言
l1t1 小时前
duckdb excel插件和rusty_sheet插件在python中的不同表现
开发语言·python·excel
人道领域1 小时前
【黑马点评日记】高并发秒杀:库存超卖与锁机制解析
java·开发语言·redis·spring·intellij-idea