# v7.8.5 PyInstaller `app.licensing` 漏打包修复

## 现场报错

冻结 EXE 启动时报：

`ModuleNotFoundError: No module named 'app.licensing'`

堆栈显示 `app/updater.py` 第 25 行导入 `.licensing` 时失败。
这属于构建产物缺模块，不是用户电脑缺 Python 依赖。

## 修复

1. 新增稳定冻结入口 `packaged_entry.py`。
2. 新增 `BUILD_EXE_PYINSTALLER.bat` / `build_exe_pyinstaller.ps1`。
3. PyInstaller 强制使用 `--collect-submodules app`，收集整个 `app` 包。
4. 同时对关键模块增加 hidden-import：
   - app.licensing
   - app.license_public_key
   - app.security
   - app.updater
   - app.cloud_backup
   - app.desktop
   - app.db
   - app.services
5. 构建完成后真实启动冻结 EXE 执行 `--package-smoke-test`。
   只有关键模块全部可导入时才允许发布。
6. PyInstaller 使用 `--onedir`，避免 onefile `_MEI` 临时目录与
   云恢复、热更新、Node/FFmpeg portable 目录发生路径冲突。
7. 现有 Nuitka 构建同样增加 `app/licensing.py` 存在性检查。

## 发布要求

PyInstaller 构建后必须发布整个：

`pyinstaller_dist/QQ频道本地多QQ运营台/`

不能只复制其中的 EXE。
