In this case I sometimes wonder if I'm a part of the problem rather than a part of the solution. When writing Windows apps for several years I've preferred to use what's called ClickOnce deployment. For those of you not familiar with ClickOnce, it's an idea Microsoft came out with years ago, whereby a Windows application could keep itself up to date.
By and large, it works well. I first started using it at my old job. I'd be in Visual Studio, then I'd right-mouse on the project I wanted to deploy and publish it using ClickOnce deployment, to wherever I wanted it to go. ClickOnce can deploy either to a network share or a website. It can be configured to check for latest updates when a user first runs an application or download and apply the update when a user closes the application. And I believe it also can be configured to disallow a version of the app not to run below some version number. That way, if you've made some major, breaking changes, you can specify the minimum version number for the user to run. That way you can prevent a user from running some version of the app you know can't support the current database schema, for example.
All of these things work well, from my experience. However, in perusing the Internet I've seen some people hate ClickOnce and those who write apps deployed using ClickOnce. I'm not sure why, they never explain, but they do hate people such as myself who write Windows app that are deployed using ClickOnce. It's this that makes me wonder if I'm a part of the problem.
I also know that for me, it's become somewhat more problematic. In my old job we didn't do anything like CI/CD. We didn't have the tools to do CI/CD. Whether we were developing web apps or Windows app (I worked on both, equally), it was always right-mouse button click on the project within Visual Studio you wanted to deploy, then deploy them.
In my current job we've been using TFS since before I came onboard back in 2015. The thing that makes it problematic is the former TFS administrator was a wizard at PowerShell. He found a way of making a TFS Build and Release deploy ClickOnce deployments. However, he only did it the default way - which is the ClickOnce app checks to see if there's a newer version of itself when it first launches, then it downloads it and installs it if the user gives the OK. No other choice and unfortunately that former TFS administrator didn't document anything. And I'm not the PowerShell wizard he is. So, we've got only one way of doing things, and the user must always install the latest version when prompted to or else.
Kindest Regards, Rod Connect with me on LinkedIn.