PHP打包成EXE后无法显示版本信息,本质是打包工具未注入或不支持Windows版本资源;ExeOutput需在Project Settings→Version Info中填四段式File version;通用打包器须用Resource Hacker等工具手动注入,PHP脚本直接修改PE资源会破坏文件结构。
PHP 本身不能直接编译为 Windows 原生 .exe,所有“PHP 打包 EXE”方案(如 BoxedApp Packer、ExeOutput for PHP、PHP Desktop)都是把 PHP 解释器 + 你的脚本 + Web 服务器一起封装进一个自解压/自运行容器。这类 EXE 的版本信息(文件属性里的“详细信息”标签页)**默认由打包工具写入,PHP 代码无法控制**。
如果你看到的 EXE 文件属性里“版本”全为 0.0.0.0 或空白,不是 PHP 写错了,而是你用的工具根本没提供设置入口,或者你没在正确位置配置。
ExeOutput for PHP 是少数原生支持 Windows 版本资源的工具。它会在生成 EXE 时调用 rc 资源编译流程,把你在界面填的字段写入最终文件。
File version(如 1.2.3.0)、Product version(如 1.2.3)Company name、File description、Legal copyright
File version 必须是 X.X.X.X 四段数字格式,填 1.2.3 会被自动补成 1.2.3.0;但若填 1.2,则整个版本块可能被忽略像 BoxedApp Packer、Enigma Virtual Box 这类通用虚拟化打包器,默认不处理 Windows 版本资源。想加版本信息,得走“先打包,再注入”的路子——用外部工具修改已生成的 EXE 文件。
推荐方案:用微软官方 rc.exe + link.exe(来自 Windows SDK 或 Visual Studio)或轻量工具 Resource Hacker(免费 GUI)。
Resource Hacker 操作路径:File → Open → 选你的 EXE → 右侧展开 Version → 右键 Version → Replace
.rc 文件(含 VS_VERSION_INFO 块),或直接从另一个带版本的 EXE 中复制粘贴Resource Hacker 修改后可能校验失败、无法启动;务必先备份原文件并测试file_put_contents 改 VERSIONINFO 不行?Windows 版本信息是 PE 文件头里的 RESOURCE 区段(类型为 RT_VERSION),属于二进制结构体,不是普通文本。PHP 没有内置函数能安全解析、定位、重写 PE 资源节。
试图用 PHP 直接读写 EXE 文件来“打补丁”,极易破坏 PE 结构,导致:

This app can't run on your PC 或黑窗口闪退真正可控的方式只有两种:用支持版本字段的专用打包器(如 ExeOutput),或用专业资源编辑工具在打包后注入——别指望 PHP 脚本自己搞定。