kuiperzone/PupNet-Deploy

MSIX support on Windows

maxkatz6 opened this issue · 4 comments

MSIX/MSIXInstaller is a newer alternative to package windows applications. Which is also supported by MS Store and winget.
As a technology it has quite some noticiable benefits:

  • App is packaged from the start to end, providing easy install and uninstall
  • By default, app installation is sandboxed and shared between windows users, making it safer to reuse app installation. Unlikely hacks with installation inside of multiple AppData to do the same before.
  • Windows automatically creates AppData folder for the application with full access (and deletes on uninstall)
  • It has autoupdate support using appinstaller file scheme. Partially explained here https://learn.microsoft.com/en-us/windows/msix/non-store-developer-updates, but it doesn't necessary needs any special code, as Windows updates apps automatically.
  • It is used by default in MAUI
  • It provides app identity to the packages, which means apps can use wider range of WinAPIs, including app notifications
  • Provides package signing build in, similar to dmg in macos

Still, it has some drawbacks:

  • It's not commonly used even today after years being available.
  • As mentioned above, app installation folder has restricted read only access, so apps should be changed to respect that (and use AppData folder for writeable data per user)
  • Build-in automatic autoupdate feature was broken between 2018 and 2021 windows versions, so it's not really an option. Still it's pretty easy to do manual update feature with windows APIs with additional code. Also, there is no partial update (whole package to be redownloaded)
  • On some OS installations this whole feature can be disabled by trimmed down unofficial Windows builds (aka, "no-trash no-ms-store clear lightweight windows").

Personally, I previously preferred to use MSIX as a packaging/installation tool with manual autoupdate functionality implemented on top of it.
I won't have much time implementing it here in near future, and I understand it won't be in priority by maintainers either.

But still wanted to open this issue to see if there is any interest from the community.

Technically, MSIX also supports app add-ins which can be installed once for whole system. Like, WebView2 package as part of MSIX installation. But I never tried that so not sure how it works.
In general, MSIX format is richer that just package and install.

Dear @maxkatz6,

Thank you very much for your suggestion and for providing a detailed explanation.

There are a couple of package kinds I would like to see supported in PupNet in the future and MSIX would be one of those, although I think it would need some thought. For example, as you say, "It's not commonly used even today after years being available." However, I also note that it is used by MAUI and may gain traction. Whereas, InnoSetup is old, but has remained popular.

In a couple of weeks, however, I start a new full time job so I'm not sure how much time I will have available either. In the short-term, I am very keen to fix bugs and ensure that PupNet is robust.

I would be keen, also, to see if there is interest from the community, as you suggest. While I think it would be a mistake for PupNet to attempt to support every deployment kind on the planet, I would be willing to support such efforts in principle.

Thanks again

Andy

PS. I think the following note you made is applicable to most deployment kinds, and should be present in the README. Thanks again.

As mentioned above, app installation folder has restricted read only access, so apps should be changed to respect that (and use AppData folder for writeable data per user)

I got to say @maxkatz6, we're in similar situations. Over-saturated with things to do, lack of time to work on open source projects. And very very few people stepping up to contribute to those projects.