frankenphp在windows开机自启需借助系统机制,推荐注册为windows服务(用nssm封装)或任务计划程序触发;不可用启动文件夹,因其为无gui命令行程序。

FrankenPHP 在 Windows 上实现开机自动启动,核心思路和其他本地 Web 服务(如 Nginx、PHP-FPM)一致:它本身是单二进制可执行文件(frankenphp.exe),不自带服务注册能力,需借助系统机制将其作为后台服务或登录任务拉起。由于 FrankenPHP 常用于开发或轻量部署,推荐两种稳定、免登录、无需用户交互的方式:注册为 Windows 服务(推荐),或用任务计划程序触发。
注册为 Windows 服务(最可靠,系统级自启)
这是首选方案,尤其适合希望 FrankenPHP 在系统启动后、用户未登录时就运行(例如作为内网 API 服务或常驻 HTTP 服务器)。需使用 NSSM(Non-Sucking Service Manager)封装:
-
下载并准备 NSSM
- 访问 nssm.cc 下载最新版 ZIP;解压后取
win64\nssm.exe(64位系统)或win32\nssm.exe(32位);建议复制到C:\Windows\System32或项目目录。
- 访问 nssm.cc 下载最新版 ZIP;解压后取
-
以管理员身份运行命令行
- 按 Win + X → 选择“终端(管理员)”或“Windows PowerShell(管理员)”。
-
执行安装命令
nssm install FrankenPHP
弹出图形界面后填写:
-
Path:
C:\path\to\frankenphp.exe(你的 FrankenPHP 安装路径,必须是绝对路径) -
Startup directory:
C:\your\project\root(即含Caddyfile或index.php的项目根目录) -
Arguments:
run --config Caddyfile(若配置文件名不是默认Caddyfile,请写全名;也可加--no-color降低日志干扰) -
Service name:
FrankenPHP(自动填充) -
Display name:
FrankenPHP Web Server -
Description:
High-performance PHP runtime with built-in HTTP/3 and HTTPS -
Log on:保持默认
Local System account(若需访问网络共享或用户配置文件,再改用指定账户) -
I/O:建议设置
stdout和stderr日志路径(如C:\frankenphp\logs\stdout.log),便于排错
-
Path:
-
启动服务并设为自动
- 运行
services.msc→ 找到 “FrankenPHP” → 右键 → 属性 → 启动类型设为 自动(延迟启动) → 点击“启动” - 验证:打开浏览器访问
http://localhost,应能加载你的应用。
- 运行
用任务计划程序启动(适合依赖桌面环境的场景)
若 FrankenPHP 需要读取用户配置、访问 OneDrive 同步目录,或你更倾向在用户登录后才启动(比如开发机),可用此法,支持延迟与错误重试:
- 打开任务计划程序:按 Win + R → 输入
taskschd.msc→ 回车 - 右侧点击 创建任务(非“基本任务”,以便精细控制)
-
常规选项卡:
- 名称填
Start FrankenPHP - 勾选 “不管用户是否登录都要运行”(若选此项,必须勾选 “不存储密码”,且 FrankenPHP 配置不能依赖用户密钥)
- 或选 “仅当用户登录时运行”(更安全,适合开发环境)
- 名称填
-
触发器 → 新建 → 选择 “登录时” → 勾选 “延迟任务时间” 设为
30 秒(避开系统刚登录时的资源争抢) -
操作 → 新建 →
- 程序:
C:\path\to\frankenphp.exe - 参数:
run --config Caddyfile - 起始于:
C:\your\project\root(关键!否则找不到配置或静态文件)
- 程序:
- 条件选项卡:取消勾选 “只有在计算机使用交流电源时才启动此任务”(避免笔记本电池模式失效)
- 设置选项卡:勾选 “如果任务失败,每隔 10 分钟重新运行,最多重复 3 次”
补充说明
- 不要用启动文件夹(shell:startup):FrankenPHP 是命令行程序,没有 GUI,放入启动文件夹只会闪退(快捷方式无法维持长期进程)。
-
防火墙注意:首次启动后,Windows 防火墙可能弹窗拦截;请允许
frankenphp.exe通过专用/公用网络。 -
端口冲突检查:确保
80/443/2015(默认管理端口)未被 Skype、IIS 或其他服务占用。 -
配置热更新:FrankenPHP 支持
frankenphp run --watch自动重载,但服务模式下不默认启用;如需,可在 Arguments 中加入--watch(注意日志输出会变多)。
FrankenPHP 开机自启本质是让它的进程随系统就绪而持续运行,而非每次请求才启动。注册为服务是最贴近生产环境的做法,也与它“单二进制替代 Nginx + PHP-FPM”的设计哲学一致。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











