ZH

jumphp2installer:为你的软件打造安装程序

jumphp2installer 为 Windows、macOS 和 Linux 生成真正的原生安装程序,可用于你的游戏、JumPHP 应用或任何软件。 你只需写一个简短、易读的 YAML 脚本,用户下载一个文件即可。它会显示安装向导(欢迎、许可协议、文件夹、选项), 始终安装最新版本,并附带卸载程序。它是自由的开源软件: github.com/davidnurdin/jumphp2installer。

安装向导的欢迎页
欢迎
需要接受的许可协议
许可协议
选择安装文件夹
文件夹
选项:快捷方式
选项
安装完成
完成

它能做什么

  • 每个系统一个文件:My-App-setup.exe(Windows 10 和 11)、My-App-setup-macos.zip(Apple 芯片和 Intel 的 Mac)、My-App-setup-linux-x86_64。无需预先安装任何东西。
  • 始终是最新版本:安装程序在启动时读取你的脚本。因此一年前下载的安装程序也会安装今天的版本。
  • 你的配色的向导:你的名称、图标、侧边图片、颜色、许可协议和文字。根据电脑的语言显示英文或法文。
  • 常用步骤:下载(带 SHA-256 校验)、解压(.zip、.tar.gz)、复制、写入文件、设为可执行、运行命令、 创建快捷方式(桌面、菜单)。
  • 真正的卸载程序:它出现在 Windows 的“应用”列表和 Linux 的菜单中。它只删除安装时创建的内容,不碰其他东西。
  • 无需管理员权限:一切都为当前用户安装,放在用户自己的程序文件夹中。
  • 也可用命令行:--silent 无窗口安装(部署、脚本、CI)。

安装脚本

install.yaml 文件说明安装程序显示什么(pages)和做什么(steps)。同一个脚本可在三个系统上使用: 变量({folder}、{platform}、{exe}…)和 os: 键负责处理差异。

app:
  name: My App
  publisher: Me
  website: https://example.cn
  icon: icon.png
  banner: banner.png          # 向导左侧的图片(172 x 420)
  accent: "#2f6fed"

version:
  github: me/my-app           # GitHub 的最新发布给出 {version}

pages:
  - welcome
  - license: LICENSE.txt
  - folder: "{programs}/{app}"
  - options:
      desktop: 桌面快捷方式
  - install
  - finish: {run: "{folder}/my-app{exe}"}

steps:
  - download: https://github.com/me/my-app/releases/download/v{version}/my-app-{platform}.zip
  - extract: {strip: 1}
  - executable: "{folder}/my-app"
    os: [linux, macos]
  - shortcut: {target: "{folder}/my-app{exe}", where: desktop}
    if: desktop
  - uninstaller

页面

页面 显示内容
welcome 欢迎文字(默认:“欢迎安装 {app} {version}”)
license 包中的一个文件,必须接受才能继续
folder 文件夹,带“浏览…”、所需空间和可用空间;文件夹已被使用时会提示
options 复选框,供步骤再次使用(if: desktop)
install 进度条和详细信息
finish 结束页,带“启动 {app}”复选框(run,可按系统不同)

步骤

步骤
download 一个地址或包中的文件;文件不对时 sha256 会停止一切
extract 解压到 {folder};strip: 1 去掉压缩包的顶层文件夹
copy、mkdir、write、delete 文件和文件夹(delete 只作用于安装文件夹、用户文件夹和临时文件夹)
executable 使文件可执行(Linux、macOS)
shortcut desktop、menu 或 both:Windows 上为 .lnk,Linux 上为 .desktop,macOS 上为链接
run 在文件夹中运行命令
uninstaller 安装卸载程序并在系统中注册

每个步骤都接受 if:(已勾选的选项,或 "!option")、os:(windows、macos、linux)和 label:。

版本

写法 {version}
version: 1.4.0 固定
version: {github: me/my-app} 仓库的最新发布(其标签,去掉 v)
version: {latest: https://…/latest.json} 该地址的应答:{"version": "1.4.0"} 或纯文本

变量

变量 Windows Linux macOS
{programs} %LOCALAPPDATA%\Programs ~/.local/opt ~/Applications
{desktop}、{menu} 桌面、开始菜单 桌面、~/.local/share/applications ~/Desktop
{platform} windows-x86_64 linux-x86_64 macos-arm64 / macos-x86_64
{exe} .exe (空) (空)
{folder}、{app}、{version}、{home}、{temp}、{os}、{arch}、{download}

完整参考见 docs/installer/script.md。

三种发布方式

1. 在 jumphp.net 上,无需安装任何东西

在工作室中,“新建安装程序”会打开一个编辑器:

  • YAML 脚本会在你输入时检查(每个错误都标出行号);
  • 旁边的向导预览会实时更新;
  • 你可以拖入图片、许可协议和包中的小文件。

发布后,安装程序会获得自己的下载页面和三个链接,每个系统一个。在发布之前,只有你可以试用。

2. 在 GitHub 发布中,无需服务器

包(install.yaml 及其文件)和安装程序会附加到你仓库的每个发布中。安装程序读取最新发布,因此版本之间无需修改任何 东西。工作流会在每次发布时完成这些:

# .github/workflows/installer.yml
on:
  release:
    types: [published]
jobs:
  installer:
    uses: davidnurdin/jumphp2installer/.github/workflows/package.yml@main
    with:
      folder: installer        # install.yaml 及其文件
    permissions:
      contents: write

也可以从 jumphp2installer 的克隆中手动完成: tools/github-release.sh me/my-app installer。你的链接: https://github.com/me/my-app/releases/latest/download/My-App-setup.exe。

如果你的仓库发布多个产品(一个用 v* 标签,另一个用 ide-v*),“最新发布”可能属于另一个产品。这时请从仓库的 文件提供包(https://raw.githubusercontent.com/…/installer/),旁边放一个 version.json。JumPHP IDE 就是这样做的。

3. 在你自己的服务器上

jumphp2installer 的服务器是一个运行在 Docker 中的 Symfony + MariaDB 应用(仓库中的 server/):账户、编辑器、 预览、下载页面和统计。一条 docker compose up -d 即可启动。简单的静态网页也可以充当服务器(一个包含 install.yaml 及其文件的文件夹):

php tools/package-release.php my-package/ https://my-site.cn/installer/ bases/ out/

用于 JumPHP 游戏或应用

bin/jumphp app:export my-app --windows --macos(游戏用 export:standalone)会为每个系统生成一个可执行文件。把它们 附加到发布中,然后使用 jumphp-app.yaml 示例。 你的 Claude 也会做:对它说“为我的游戏做一个安装程序”(仓库中有 jumphp2installer skill)。

命令行

My-App-setup-linux-x86_64 --silent --folder=/opt/my-app --no-option=desktop
My-App-setup.exe --silent
"C:\…\My App\uninstall.exe" --uninstall --silent
jumphp2installer-linux-x86_64 --check --script=install.yaml      # 检查脚本
jumphp2installer-linux-x86_64 --script=install.yaml              # 用本地脚本试用向导
jumphp2installer-linux-x86_64 --make=My-App-setup.exe --server=github:me/my-app --from=jumphp2installer-windows-x86_64.exe

工作原理

安装程序本身就是一个 JumPHP 应用:向导是 HTML 页面,工作由 PHP 完成,运行在 StaticPHP 的独立 PHP 上。包的地址被写入 可执行文件的内嵌 php.ini,且文件大小不变。因此服务器无需编译任何东西,就能在一瞬间为每个包生成安装程序。下载和解压 每一帧推进一点:窗口永远不会卡住。每个版本发布前,GitHub Actions 都会在 Linux、Windows 和两台 Mac(Apple 芯片和 Intel)上真实测试:安装、快捷方式、卸载条目,然后卸载。

限制

  • 安装程序未签名:Windows SmartScreen 和 macOS Gatekeeper 会在首次运行时提示(Mac 上:右键 › 打开)。
  • 仅为当前用户安装(不支持 Program Files、服务或文件关联)。
  • 不支持 Linux ARM 和手机。
  • 在 Windows 上请通过长路径启动,不要使用 8.3 短文件名(C:\Users\RUNNER~1\…)。