news 2026/10/9 1:57:31

FufuLauncher开发指南:项目结构解读,如何编译、调试与打包Inno Setup安装包

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
FufuLauncher开发指南:项目结构解读,如何编译、调试与打包Inno Setup安装包

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 SDKglobal.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,它做三件事:

  1. 单实例控制:通过AppInstance以"FufuLauncher"为键注册,重复启动会自动把激活参数重定向到已有实例——调试时如果发现「没启动起来」,多半是已有实例在后台。
  2. 命令行分支:--elevated-inject、--yae-inject等参数用于以管理员权限执行游戏注入,理解注入流程必读。
  3. 启动 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):

  1. FufuLauncher.csproj 中的Version/AssemblyVersion/FileVersion
  2. setup.iss 顶部的AppVersion定义
  3. 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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/9 1:55:17

hom_mat3d_translate_local 和 hom_mat3d_translate 区别

✅ 核心区别总结算子平移参考系说明hom_mat3d_translate(HomMat3DIn, Tx, Ty, Tz, HomMat3DOut)全局坐标系(世界坐标系)沿固定的世界坐标轴方向平移hom_mat3d_translate_local(HomMat3DIn, Tx, Ty, Tz, HomMat3DOut)局部坐标系(当前物体自身坐…

作者头像 李华
网站建设 2026/10/9 1:54:51

题解:洛谷 AT_abc451_e [ABC451E] Tree Distance(废)

本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。 欢迎大家订阅我的专栏:算法…

作者头像 李华
网站建设 2026/10/9 1:53:45

GoogleTest C++单元测试框架完全指南:从零集成到CI实践

简介:GoogleTest是Google开源的C单元测试框架,基于xUnit架构,面向需要系统开展代码测试的开发者、测试工程师及框架学习者。它支持自动测试发现、丰富的断言集、用户自定义断言与死亡测试,能够区分致命和非致命故障,并…

作者头像 李华
网站建设 2026/10/9 1:51:17

别再让 AI 猜你的需求:AIM + MAP 双框架,把提示词一次写准

很多人和 AI 的对话体验其实差不多:问了不少,答案不少,真正能用的没几个。问题通常不在 AI 的能力,而在提问本身 —— 身份没说清、背景没给全、要求想到哪说到哪。结果就是那句老话:想要的答案得不到,得到…

作者头像 李华
网站建设 2026/10/9 1:50:24

openrig 实战:Node.js + tmux 搭建 Claude Code 与 Codex 稳定开发环境

1. 从"openrig"这个名字说起:它到底想解决什么问题第一次看到openrig这个词,我脑子里蹦出来的画面是矿场里的钻井平台——rig 在英文里本来就有"装备、装置、平台"的意思,open 则代表开放。把这两个词拼在一起&#xff0…

作者头像 李华