# Windows 桌面端(全局代理) Windows 版与 macOS 桌面同路线:Flutter 应用 + `sing-box.exe` 子进程 + **wintun** TUN 接管整机流量(全局代理)。提权方式:应用 manifest 设了 `requireAdministrator`, 启动时 UAC 提权,`sing-box.exe` 子进程继承管理员权以创建 TUN 适配器。 > 状态:代码就绪,**未在真 Windows 机器上构建/验证过**(开发在 macOS)。以下为 > 在 Windows 上首次构建运行的步骤。 ## 前置 - Windows 10/11,已装 Flutter(含 Windows 桌面支持)、Visual Studio(C++ 桌面负载)。 - 拉取内核二进制(在仓库根,Git Bash / WSL 下跑;脚本会下载 sing-box.exe + wintun.dll 并校验 SHA256): ```bash app/kernel/fetch-desktop-bin.sh windows amd64 # 产物:app/kernel/dist/desktop/windows-amd64/{sing-box.exe, wintun.dll} ``` ## 开发运行(flutter run) 从仓库内直接跑时,`kernel_process.dart` 的 `_resolveBinaryPath` 会从可执行目录向上 查找 `app/kernel/dist/desktop/windows-amd64/sing-box.exe`,无需手动放置: ```powershell # 必须用「管理员」终端(TUN 需要管理员权) cd client flutter run -d windows --dart-define=PANGOLIN_API_URL=http://<后端IP>:8080 ``` 也可用环境变量显式指定二进制: `set PANGOLIN_SINGBOX_BIN=C:\path\to\sing-box.exe`(同目录须有 `wintun.dll`)。 ## 打包(release) `flutter build windows` 后,CMake 的 install 步骤会自动把 `app/kernel/dist/desktop/windows-*/{sing-box.exe, wintun.dll}` 拷到 app `.exe` 同级目录 (见 `windows/CMakeLists.txt` 的 “Pangolin sing-box kernel” 段)。**wintun.dll 必须与 sing-box.exe 同目录**,否则 sing-box 无法创建 TUN。 ## 端到端验证(连通出网) 1. 管理员终端 `flutter run -d windows`(或运行打包后的 `.exe`,会弹 UAC)。 2. 登录 → 选节点 → connect。 3. 验证全局代理生效: ```powershell curl https://api.ipify.org # 出口 IP 应为节点公网 IP ``` ## 已知限制 / BACKLOG - 提权用 `requireAdministrator`(每次启动弹一次 UAC)。正式版可换**特权 helper 服务** 避免每次 UAC,类比 macOS 的 SMJobBless。见 `runner/runner.exe.manifest`。 - 未做 Inno Setup 安装包 / 代码签名 / CI Windows job(后续切片)。 - 停止用 `Process.kill`(Dart 在 Windows 映射为 TerminateProcess);wintun 适配器随 进程退出自动移除。