文章摘要
作者回忆了自己从小使用Windows开发的经历,但最近尝试开发一个Windows原生应用时发现开发环境混乱,工具链复杂,理解为什么现在人们更倾向于使用Electron而不是原生开发。他开发的Display Blackout工具验证了这一困境。
文章总结
标题:Windows原生应用开发的混乱现状
作为一名长期使用Windows的开发者,作者回忆了自己从童年使用Visual C++ 6.0到大学毕业后从事.NET开发的经历。尽管他始终关注Windows开发生态系统,但直到最近尝试开发一款名为"Display Blackout"的小工具时,才真正体会到Windows原生应用开发的困境。
开发背景
"Display Blackout"是一个简单的工具,用于在多显示器环境下将两侧显示器显示为纯黑色(对OLED显示器特别有用)。虽然已有类似工具,但作者希望借此学习现代Windows开发。
Windows开发框架的混乱演变
文章详细梳理了Windows开发框架的演进历程: 1. Win32 C API → MFC → WinForms → WPF → WinRT XAML → UWP XAML → WinUI 3 2. 每个新框架都试图解决前代的问题,但都留下了功能空白 3. 微软在Windows 11中放弃了强制使用新框架的策略
开发选择困境
作者面临的技术选择困境: 1. 语言选择: - C++:性能好但内存不安全 - C#/.NET:存在部署问题(Windows 11仅预装.NET 4.8.1) - .NET AOT:导致二进制文件臃肿(9MB的简单工具) - Rust:微软已放弃相关支持
- 分发问题:
- MSIX需要昂贵的代码签名证书(200-300美元/年)
- 无签名安装体验极差
- 微软商店以"缺乏独特价值"为由拒绝该应用
框架功能缺失
即使使用最新的Windows App SDK/WinUI 3,许多基本功能仍需依赖Win32 API: 1. 显示器枚举和监控变化 2. 创建无边框、非激活窗口 3. 全局键盘快捷键 4. 系统托盘图标(完全缺失标准实现)
互操作问题
- C#与Win32 API互操作工具CsWin32存在诸多问题
- C#语言本身缺乏对Win32关键参数类型的支持
- WPF数据绑定20年来改进甚微
现状与建议
- 微软似乎不再重视原生应用开发
- 许多第一方应用已转向Web技术
- 开发者社区转向Avalonia/Uno Platform等第三方框架
- 作者认为在这种情况下Electron/Tauri可能是更合理的选择
可能的改进方向
- 通过Windows Update分发.NET运行时
- 降低代码签名证书成本
- 改善无签名MSIX安装体验
- 加强WinUI 3的开发投入
结论
鉴于Windows原生开发生态的混乱现状,作者认为Web技术栈(通过Electron或Tauri)配合必要的Win32 API调用可能是更实际的选择。虽然微软近期宣布将更多使用WinUI 3,但开发者群体对此并不乐观。
(注:原文中的技术细节、历史演变和具体问题描述均被保留,同时去除了部分个人经历和情感表达,使内容更紧凑专业。)
评论总结
总结评论内容:
- 对Windows开发框架混乱的批评
- 主要观点:微软不断推出新框架(Win32/WPF/WinUI/MAUI)却不淘汰旧框架,导致开发者选择困难
- 关键引用: "It has been a mess for 15 years...Nobody knows which one to pick" (ashwinnair99) "given what a mess the Windows app platform is, I'll pick the web stack any day" (wolvoleo)
- 对兼容性问题的讨论
- 主要观点:Windows API因向后兼容而停滞不前,但这也带来了稳定性优势
- 关键引用: "the Windows API being locked in the distant past for backwards compatibility" (intrasight) "The program did not need to be updated...shit just kept working throughout the years" (cv5005)
- 跨平台解决方案的支持
- 主要观点:许多开发者倾向使用Electron、Qt等跨平台方案
- 关键引用: "That is why everyone even Microsoft themselves does Electron" (ozim) "Best framework for this is Qt" (delduca)
- 对特定技术的推荐
- 主要观点:不同开发者推荐各自偏好的技术方案
- 关键引用: "Lazarus is crazy good, as is Delphi" (lpcvoid) "I just use JUCE...if its not cross platform C++, it just doesn't make sense" (MomsAVoxell) "WinForms forever" (LocalH)
- 对开发体验的抱怨
- 主要观点:Windows开发环境复杂,新手难以入门
- 关键引用: "it's a complete mess (at least coming in anew)" (mellosouls) "Boy windows API is a mess" (p0w3n3d)
- 对微软策略的批评
- 主要观点:微软缺乏清晰的开发路线图和技术支持
- 关键引用: "they have completely abandoned any attempt at providing a good user experience" (sylens) "Microsoft didn't do a full operating system refactor" (intrasight)