WPF 启动器 + 动态加载,让分级客户端更新静悄悄

WPF 启动器 + 动态加载,让分级客户端更新静悄悄

💡 原文中文,约3400字,阅读约需9分钟。
📝

内容提要

本文介绍了一种企业级桌面应用架构,采用轻量级WPF启动器动态加载主程序DLL,实现模块化和动态更新,降低运维成本,避免杀毒软件干扰。主程序独立编译,支持无感更新和严格认证机制,提升用户体验和数据安全。

🎯

关键要点

  • 企业级桌面应用面临频繁更新和杀毒软件干扰的问题。
  • 推荐使用轻量级WPF启动器动态加载主程序DLL,实现模块化和动态更新。
  • 主程序独立编译,支持无感更新,降低运维成本。
  • 项目用于内容分级管理,核心业务逻辑封装在独立的WPF类库中。
  • 启动器负责初始化日志、显示加载界面和加载DLL,主程序完全解耦。
  • 动态加载主程序,依赖自动解析,避免找不到程序集错误。
  • 无感更新只需替换DLL文件,规避安全软件误报。
  • 集成结构化日志系统,便于排查启动失败原因。
  • 主程序使用MVVM模式构建,包含用户认证和托盘管理等功能。
  • 方案优势在于稳定的启动器和可变的主程序,减少用户干扰。
  • 利用.NET的collectible AssemblyLoadContext,避免资源泄露。
  • 主程序实现严格的认证机制,保障数据安全。
  • 基于.NET 8开发,使用WPF和HandyControl提升界面体验。
  • 启动器使用AssemblyLoadContext实现程序集隔离加载,日志系统选用Serilog。
  • 更新流程简化为后台静默替换DLL,用户不再收到安全警告。
  • 项目源码分为Launcher项目和主程序类库,易于复用和调试。
  • 总结强调启动器解决了桌面应用更新的实际问题,值得尝试。

延伸问答

WPF启动器的主要功能是什么?

WPF启动器负责初始化日志、显示加载界面、创建隔离的AssemblyLoadContext,并动态加载主程序DLL。

如何实现无感更新?

无感更新通过替换主程序的DLL文件来实现,无需重新安装或修改启动器,避免安全软件误报。

这个架构如何降低运维成本?

通过将主程序解耦并支持动态加载,减少了更新频率和用户干扰,从而降低运维成本。

项目中如何处理安全性问题?

主程序实现了严格的认证机制,未登录无法关闭程序,超时自动降权,保障数据安全。

使用AssemblyLoadContext有什么好处?

AssemblyLoadContext可以实现程序集隔离加载,避免资源泄露,并支持动态加载依赖项。

这个项目适合哪些场景?

该项目适合需要频繁更新的企业级桌面应用,尤其是对用户体验和数据安全有高要求的场景。

➡️

继续阅读