Top
Best
New

Posted by domenicd 11 hours ago

Windows native app development is a mess(domenic.me)
211 points | 218 commentspage 2
rwmj 7 hours ago|
This is quite timely as we need to write a simple UI for Windows (a few buttons, status, maybe a file menu). The main constraint is it must compile to a single binary (.exe) with no dependencies such as runtimes, DLLs, languages etc. It also needs to run on some older unsupported Windows systems, probably Windows >= 7, 32 bit.

My first thought was MFC. Basic, fast, well understood.

But then maybe WxWindows so we can cross-compile it (from Linux) and use the same UI on other platforms? It could probably be compiled statically although I've not tested it.

Or Mono, but that needs a runtime?

Edit: Some comments mention Qt which could also work although how large is the runtime? Can it be compiled statically?

hermitcrab 40 minutes ago||
Qt is compiled to a native .exe. It doesn't have a runtime. To give you a rough idea of size, I have 3 GUI application written using Qt/C++. The installers are 72 MB, 69 MB and 32 MB. The first 2 include a significant amount of documentation. I could probably get them a bit smaller if I really needed to.
Atotalnoob 4 hours ago|||
.net will work. Use a weaver (fody) or the modern features to roll everything into 1 .exe.

Use self-contained to have everything together.

https://learn.microsoft.com/en-us/dotnet/core/deploying/sing...

Conan_Kudo 5 hours ago|||
> Edit: Some comments mention Qt which could also work although how large is the runtime? Can it be compiled statically?

You need a commercial license for that, but yes you could. But since applications are typically distributed with install bundles that put into application-local program files directories, it's not super-important as long as you only cherry-pick the Qt libraries you need.

rubymamis 1 hour ago||
This is wrong. There's a misconception that you can't statically link your app when using the open-source LGPL version of Qt. From my reading of the LGPL license this doesn't appear to be the case[1]. The LGPL allows you to statically link your app as long as you provide the object files and allow users to relink your app with a different version of Qt.

I've observed many people spreading this misinformation about only being able to dynamically link with the LGPL version of Qt. Please stop this.

[1] https://www.gnu.org/licenses/gpl-faq.html#LGPLStaticVsDynami...

Conan_Kudo 1 hour ago||
Yes, that is true, but in practice nobody has ever done that. And the material complexity of offering that mode is higher than just dynamically linking the library.

Also, modern compilers make this method much harder to use. It is much harder to stably relink object files like that than to just use the normal dynamic link method.

kwanbix 7 hours ago|||
Delphi or Lazarus (https://www.lazarus-ide.org) should solve it.
rwmj 6 hours ago||
Nice, I didn't know there was a free software version of Delphi nowadays.
dardeaup 5 hours ago||
With restrictions of course.
lstodd 1 hour ago||
For such a trivial thing I'd just take imgui.

MFC, wx, Qt .. it's all overcomplex pointless bloat for this task imo.

hestela 2 hours ago||
When I tried to release a flutter app via exe installer, google drive said it was a virus but it otherwise installed just fine in windows 10/11. I'm doing the same thing for msix for now. But when I searched for certificates I could only find closer to $200/yr and you need to load it in the latest $100 yubikey due to the fips requirement. I didn't realize that CAs dont let you just get the private/public key files any more. Only distribution method is hardware based fips key. I've given up entirely on code signing since I only made a single open source project for amateur radio.
mellosouls 6 hours ago||
Really nice article, thanks - yes I found the same myself recently when trying to write a trivial (I thought) Windows app.

I first investigated the Windows native options and was pretty bamboozled; I wanted to use the "mainstream" "up to date" option (presumably c# and some framework) but as TFA describes, it wasn't at all clear which that was.

I ended up doing it in python with pyqt then finding out a clean deployment was a pain, so revisited the .Net options and remembered why I'd discarded them in the first place...

It is indeed a complete mess (at least coming in anew) and a very strange situation for the world's main desktop environment to be in.

fermentation 3 hours ago||
The Windows code signing experience has prevented me from shipping apps that otherwise run perfectly fine on the platform. It is a nightmare and I cannot believe it wasn't called out in the "We want to fix Windows" blog post.

Just do exactly what Apple does. Charge me $100 directly from you and let me build an .exe that I can distribute on my website.

vegasje 2 hours ago|
This isn't well-known, so I figured I'd mention it.

Microsoft offers a service called Azure Artifact Signing (used to be called Trusted Signing) that manages code signing for you:

https://azure.microsoft.com/en-us/pricing/details/artifact-s...

It's $9.99/mo, and you don't need to worry about procuring or renewing code signing certs.

xg15 3 hours ago||
> One might think that an advantage of controlling C# would be that Microsoft has carefully shaped and coevolved it to be the perfect programming language for Windows APIs. This does not appear to be the case.

I think they spent all their mana for that on pre-.NET Visual Basic and then had nothing left.

Andrex 2 hours ago||
*has been for 20+ years

Meanwhile editions of Gnome come with Gnome Builder and Flatpak has solved the distribution problem. Things are so much better today on Linux than most people who have used Windows will even remember.

ashwinnair99 8 hours ago||
It has been a mess for 15 years and Microsoft keeps making it worse by adding new frameworks without retiring the old ones. Win32, WPF, WinUI, MAUI. Nobody knows which one to pick.
Smalltalker-80 8 hours ago||
Yes, and the hubris sting-of-death was UWP. They tried to make Windows into a mobile OS, severely restricting the alowed actions of programs, including strict certification to be able to run them (elsewhere). Of course nobody went for this and UWP died a quiet death. Recently there are signs that MS is trying to go back to making products that users actualle want (Win11 reverts). We'll see...
ack_complete 2 hours ago|||
It's hard to describe how uselessly restrictive the UWP model was when they originally introduced it as "Metro-style apps" in Windows 8. Among the things it officially did not support included:

- Multiple monitors - Non-full screen views - Sideloading outside of the Store - Offline installation - Explicit threads - thread pool only - Aligned memory allocation - malloc only - Any C++ compiler other than MSVC - Support for any version of Windows other than Windows 8 - Running apps as administrator - Running more than one instance of an app at a time - Runtime shader compilation

If any ONE of these things was a blocker, you could not write a Metro style app. And yet Microsoft pushed this extremely hard -- including almost completely ending any maintenance of Win32 APIs. And despite the many relaxations and extensions, UWP is still largely useless today, and now even itself seems to be going into maintenance mode. All of which has done a lot of damage to the state of Windows desktop platform development.

As an example of how bizarre UWP is, for some reason every time they published a list of new APIs added to it, they converted the list of API identifiers to lowercase in the documentation:

https://learn.microsoft.com/en-us/windows/uwp/whats-new/wind...

It's relatively insignificant, but... why? Just one of many things that showed how immature UWP was.

anonymars 3 hours ago||||
> They tried to make Windows into a mobile OS, severely restricting the alowed actions of program

They already had Silverlight! For Windows Phone 7. Then they killed that off too and expected the "plethora" of WP7 apps to be rebuilt for WP8 (requiring the beloved Windows 8 desktop OS for this task). Then they again expected developers to throw that away in favor of UWP for Windows 10, which unified the desktop and phone OSes. By then it was too late.

Old apps still ran on the newer OSes but the SDKs became dead-ends.

pdpi 8 hours ago|||
> (Win11 reverts).

I must've missed that one. What did they revert?

lpcvoid 7 hours ago||
It doesn't matter - what Microslop says and what they do are traditionally very distinct things.

But in case you want to read yourself: https://blogs.windows.com/windows-insider/2026/03/20/our-com...

Traubenfuchs 7 hours ago||
"File explorer launch experience" -hard to tell if this is satire…
Smalltalker-80 4 hours ago||
I did mean these, very recent promises (vaporware at this moment), without satire. https://blogs.windows.com/windows-insider/2026/03/20/our-com...
hrmtst93837 4 hours ago|||
Picking a stack for native Windows UI is like rolling dice, except sometimes you get bitten by COM for fun. If you care at all about backwards compatibility or deploying outside the MS Store you basically end up circling back to Win32 APIs much as the frameworks would love for you to pretend otherwise. Ironically, the 'official' docs now reads like a half-hearted apology for the last decade of churn.
mschuster91 7 hours ago||
> without retiring the old ones

They'd lose too much enterprise software that's not being maintained any longer but still is business critical.

You can still run most programs from the Windows 95 era unmodified on a modern Windows 11 machine and a lot of things is relying on that under the hood.

jbm 3 hours ago||
> 9 MiB

I'm glad people still care about stuff like this. It drives me insane that the simplest form-based software that I build and compile ends up being 50-100 MiB; several times video games from the 80s that I grew up with that did much more complex work, graphically and computationally, on a tenth of the space.

intrasight 8 hours ago||
"So when I went to work on my app, I was astonished to find that twenty years after the release of WPF, the boilerplate had barely changed."

Such is the benefit and the curse, I guess, of having the Windows API being locked in the distant past for backwards compatibility.

I've always been surprised that Microsoft didn't do a full operating system refactor and provide a compatibility layer for running old binaries. Perhaps they figure it would be better to just transition everything to software as a service using web tech? But I just don't see how that strategy is gonna work long-term.

mwkaufma 3 hours ago||
They DID such a refactor for Win NT under David Cutler. Even in that comparatively simpler time it was a huge undertaking, and required all-hands-on-deck management that doesn't exist anywhere in tech anymore, let alone at today's Microsoft.
fsloth 7 hours ago||
"I've always been surprised that Microsoft didn't do a full operating system refactor and provide a compatibility layer for running old binaries"

Just keeping a legacy system in working order is different skillset than writing a new system from scratch.

So you need a new team. Nothing from Windows maintenance transfers.

Maybe would require hiring someone who knows how to design an OS.

It would be a major undertaking, needing protection by CEO (and if it would not succeed CEO would loose a lot of prestige).

I'm not saying MS does not have the existing talent base. I don't _know_.

But I've been inside a house maintaining a monstrous legacy codebase.

I can tell you - it requires surprisingly little deep understanding just to keep an existing system going.

NetMageSCW 2 hours ago|
Excellent summary of the stupid state of Windows native GUI app development after the complete lack of direction or coherence Microsoft has shown. Not to mention the irony of Visual Studio not having a GUI designer for anything except Windows Forms.
More comments...