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 文件, 检查文件内容记录的时间戳, 比当前登录的时间要早几分钟, 表明确实是在系统启动的时候就自动执行了, 而不是用户登录后才触发.

相关推荐
Cg136269159747 小时前
JS-对象-Dom案例
开发语言·前端·javascript
故事和你917 小时前
sdut-程序设计基础Ⅰ-实验五一维数组(8-13)
开发语言·数据结构·c++·算法·蓝桥杯·图论·类和对象
Jin、yz8 小时前
JAVA 八股
java·开发语言
我是唐青枫8 小时前
C#.NET Span 深入解析:零拷贝内存切片与高性能实战
开发语言·c#·.net
lxh01138 小时前
数据流的中位数
开发语言·前端·javascript
Storynone8 小时前
【Day20】LeetCode:39. 组合总和,40. 组合总和II,131. 分割回文串
python·算法·leetcode
盒马盒马8 小时前
Rust:迭代器
开发语言·后端·rust
小鸡吃米…8 小时前
Python—— 环境搭建
python
io_T_T8 小时前
python 文件管理库 Path 解析(详细&基础)
python
一瓢西湖水8 小时前
Windows安装OpenClaw实践指南
人工智能·windows·ai