Hacker News 中文摘要

RSS订阅

Windows原生应用开发一团糟 -- Windows native app development is a mess

文章摘要

作者回忆了自己从小使用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:微软已放弃相关支持

  1. 分发问题
    • MSIX需要昂贵的代码签名证书(200-300美元/年)
    • 无签名安装体验极差
    • 微软商店以"缺乏独特价值"为由拒绝该应用

框架功能缺失

即使使用最新的Windows App SDK/WinUI 3,许多基本功能仍需依赖Win32 API: 1. 显示器枚举和监控变化 2. 创建无边框、非激活窗口 3. 全局键盘快捷键 4. 系统托盘图标(完全缺失标准实现)

互操作问题

  1. C#与Win32 API互操作工具CsWin32存在诸多问题
  2. C#语言本身缺乏对Win32关键参数类型的支持
  3. WPF数据绑定20年来改进甚微

现状与建议

  1. 微软似乎不再重视原生应用开发
  2. 许多第一方应用已转向Web技术
  3. 开发者社区转向Avalonia/Uno Platform等第三方框架
  4. 作者认为在这种情况下Electron/Tauri可能是更合理的选择

可能的改进方向

  1. 通过Windows Update分发.NET运行时
  2. 降低代码签名证书成本
  3. 改善无签名MSIX安装体验
  4. 加强WinUI 3的开发投入

结论

鉴于Windows原生开发生态的混乱现状,作者认为Web技术栈(通过Electron或Tauri)配合必要的Win32 API调用可能是更实际的选择。虽然微软近期宣布将更多使用WinUI 3,但开发者群体对此并不乐观。

(注:原文中的技术细节、历史演变和具体问题描述均被保留,同时去除了部分个人经历和情感表达,使内容更紧凑专业。)

评论总结

总结评论内容:

  1. 对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)
  1. 对兼容性问题的讨论
  • 主要观点: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)
  1. 跨平台解决方案的支持
  • 主要观点:许多开发者倾向使用Electron、Qt等跨平台方案
  • 关键引用: "That is why everyone even Microsoft themselves does Electron" (ozim) "Best framework for this is Qt" (delduca)
  1. 对特定技术的推荐
  • 主要观点:不同开发者推荐各自偏好的技术方案
  • 关键引用: "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)
  1. 对开发体验的抱怨
  • 主要观点:Windows开发环境复杂,新手难以入门
  • 关键引用: "it's a complete mess (at least coming in anew)" (mellosouls) "Boy windows API is a mess" (p0w3n3d)
  1. 对微软策略的批评
  • 主要观点:微软缺乏清晰的开发路线图和技术支持
  • 关键引用: "they have completely abandoned any attempt at providing a good user experience" (sylens) "Microsoft didn't do a full operating system refactor" (intrasight)