FufuLauncher开发指南:项目结构解读,如何编译、调试与打包Inno Setup安装包
【免费下载链接】FufuLauncherA third-party launcher for Genshin Impact that supports game injection, automatic check-in, and some useful small features.项目地址: https://gitcode.com/gh_mirrors/fu/FufuLauncher
本文是 FufuLauncher(芙芙启动器)开源项目的完整开发教程:带你 10 分钟读懂它的三工程解决方案结构,并一步步完成 WinUI 3 主程序的本地编译、调试,最终用 Inno Setup 打包出可直接分发的启动器安装包。无论你是第一次参与 .NET 桌面项目的新手,还是想提 PR 的贡献者,跟着下面的清单操作即可上手 🛠️。
一、项目结构解读:3 个工程各司其职
打开仓库根目录,FufuLauncher.sln 解决方案里只有 3 个工程,职责非常清晰:
| 目录 | 技术栈 | 职责 |
|---|---|---|
| FufuLauncher/ | WinUI 3 + .NET 8 | 主程序:启动游戏、自动签到、抽卡分析、插件商店等全部功能 |
| UpdateFufuLauncher/ | WPF + .NET 8 | 独立更新器:下载新版本并静默安装 |
| FufuLauncher.Installer/ | Inno Setup 脚本 | 打包 Windows 安装程序 |
主程序工程内部采用经典的 MVVM 分层,建议按这个顺序浏览源码:
- 📁 ViewModels/:所有页面状态与命令(如 MainViewModel.cs)
- 📁 Views/:XAML 界面,主界面在 MainPage.xaml
- 📁 Services/:业务逻辑,签到、注入、下载、成就都在这里
- 📁 Models/ 与 Data/:数据模型与 SQLite 仓库(EF Core)
- 📁 Strings/:14 种语言的 .resw 资源文件,界面文案全部走这里
- ⚙️ FufuLauncher.csproj:核心工程文件,声明了单文件发布、ReadyToRun、x86/x64/arm64 多平台等构建特性
💡 小提示:Assets/ 目录存放界面背景、字体、国旗图标等资源,FufuLauncher/Assets/bg.png 就是启动器默认背景。
二、环境准备:编译前必须装好的 4 样东西
| 组件 | 说明 |
|---|---|
| .NET SDK | global.json 声明需要10.0.100(rollForward: latestFeature),装对应大版本即可自动前滚 |
| Visual Studio 2022+ | 勾选「.NET 桌面开发」+「WinUI 3」工作负载 |
| Windows 11 SDK | 工程目标框架为net8.0-windows10.0.26100.0(见 FufuLauncher.csproj) |
| WebView2 运行时 | 账号扫码登录等内嵌网页功能依赖它 |
系统要求为 Windows 10 19041 及以上(app.manifest 中已声明 PerMonitorV2 高分屏适配)。
三、快速编译:两步跑起来 🚀
第一步,克隆代码到本地:
git clone https://gitcode.com/gh_mirrors/fu/FufuLauncher第二步,用 Visual Studio 打开 FufuLauncher.sln,顶部工具栏选择x64 / Debug,按F5即可编译并启动。也可以直接用命令行:
dotnet build FufuLauncher\FufuLauncher.csproj -c Debug -p:Platform=x64构建产物输出在FufuLauncher\bin\x64\Debug\net8.0-windows10.0.26100.0\下,直接运行FufuLauncher.exe也可以。
四、调试入门:从 Program.cs 一路 F12
程序入口是 Program.cs,它做三件事:
- 单实例控制:通过
AppInstance以"FufuLauncher"为键注册,重复启动会自动把激活参数重定向到已有实例——调试时如果发现「没启动起来」,多半是已有实例在后台。 - 命令行分支:
--elevated-inject、--yae-inject等参数用于以管理员权限执行游戏注入,理解注入流程必读。 - 启动 App:其余情况走 App.xaml.cs,服务全部在此注册。
调试建议:
- 断点打在 App.Startup.cs 观察启动流程,MainWindow.xaml.cs 观察窗口生命周期
- 本地配置路径由 appsettings.json 控制,默认存到
%LocalAppData%\FufuLauncher\ApplicationData - 工程引用了 Sentry(见 FufuLauncher.csproj 中的
Sentry包),线上崩溃遥测即来源于此
五、发布编译与 Inno Setup 安装包打包
这是本文的核心流程,共 3 步:
第 1 步:Release 发布主程序
dotnet publish FufuLauncher\FufuLauncher.csproj -c Release -p:Platform=x64 -r win-x64 --self-contained得益于工程内PublishSingleFile、EnableCompressionInSingleFile、WindowsAppSDKSelfContained等设置(FufuLauncher.csproj),发布会产出单个自解压的FufuLauncher.exe,用户机器无需预装 WinAppSDK。
第 2 步:编译 Inno Setup 脚本
用Inno Setup 6.3+打开 FufuLauncher.Installer/setup.iss,点击「Build → Compile」即可。脚本里几个值得学习的设计:
- 🔗源目录:
SrcDir指向..\FufuLauncher\bin\x64\Release\net8.0-windows10.0.26100.0,确保第 1 步的发布产物落在对应目录 - 📦压缩:
lzma2/ultra64+SolidCompression,安装包体积更小 - ⬇️依赖自检:
[Code]段会自动检测 .NET 8 桌面运行时、VC++ v14、WebView2、Windows App SDK,缺失时通过TDownloadWizardPage在向导中边下边装 - 🔄无缝升级:
PrepareToInstall会读取旧安装目录的Update.json判断版本,旧版自动静默卸载
第 3 步:三处版本号保持一致
发布前请核对这三处均为同一版本号(当前为1.7.1.0):
- FufuLauncher.csproj 中的
Version/AssemblyVersion/FileVersion - setup.iss 顶部的
AppVersion定义 - Update.json 中的
Version字段(主程序据此判断是否需要自更新)
编译完成后,安装包输出在FufuLauncher.Installer\installer\FufuLauncher_Setup_v1.7.1.0.exe,双击即可体验完整的安装、自启、卸载流程 🎉
六、常见问题速查 ❓
- 「SDK 不匹配」报错:
global.json锁定了 SDK 大版本,升级到对应大版本即可,无需精确到小版本 - runtimes 目录残留:工程内置了
RemoveUnwantedRuntimesFoldersTarget(FufuLauncher.csproj),Build/Publish 后会自动清理非 Windows 的运行时目录,无需手动处理 - 扫码登录白屏:99% 是缺少 WebView2 运行时,安装后重启程序
- Inno Setup 编译报错:确认使用 6.3 以上版本,低版本不支持
TDownloadWizardPage动态下载页
总结
FufuLauncher 的结构可以浓缩为一句话:WinUI 3 主程序 + WPF 更新器 + Inno Setup 脚本。掌握「dotnet publish出单文件 exe → Inno Setup 打安装包 → 三处版本号对齐」这条主线,你就能独立产出可分发的构建产物。建议先通读 Program.cs 与 App.Startup.cs,再深入 Services/ 探索你感兴趣的模块,欢迎提交你的第一个 PR 🌟
【免费下载链接】FufuLauncherA third-party launcher for Genshin Impact that supports game injection, automatic check-in, and some useful small features.项目地址: https://gitcode.com/gh_mirrors/fu/FufuLauncher
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考