The Package Support Framework (PSF) was started by Microsoft as an Open Source Project to help Win32 and .Net Framework based software operate in the new MSIX Container runtime.
Today I am embarking on replacing it.
For quite some time I have been the primary/only person working to add improvements to the project. The PSF is used by IT pros wanting to repackage existing applications, by using my own tooling, PsfTooling and TMEditX, and by using tooling from Microsoft parnter vendors like Flexera, Advanced Installer, and others. The process of creating changes, submitting them to Microsoft is a cumbersome process, and having the fixes that I submit become broken in that process has become made it quite difficult to advance PSF capabilities to provide the level of application compatibility that we’d like.
Earlier this year, I took a break on adding to the PSF to focus on making it easier to use for compatible-enough apps by IT Pros that were using my tools. But as that work was wrapping up in the testing phase I was discovering too many app that used to work thanks to the PSF no longer did. In the investigations I found that the new issues were largely due to changes made to my submitted code thanks to that cumbersome process. Additionally, I also found myself being asked over and over by customers how committed Microsoft is these days in seeing the PSF succeed and have concluded that they are not spending the resources necessary for us to be successful.
So I am today starting a new direction with regards to the PSF. From here on I will make the changes in my own open-source fork but not submit them back to the Microsoft source. This project may be found on GitHub (https://github.com/TimMangan/MSIX-PackageSupportFramework ) and should become the best source for PSF code. The default develop branch will contain the latest stable release code that I make available, with other branches used for incomplete project work. I am happy to work with others, including accepting PRs or if they just want to grab the sources for inclusion into their products.
The first release: v2021.09.26
As a first step, the September 2021 release in my develop branch now includes the following changes to the PSF:
- Updated vs projects to use supported SDKs.
- Fixes for application launching issues in PsfLauncher.
- Correct PsfLauncher when executable is a CMD/BAT file. The launcher will now again run the cmd/bat file INSIDE the container so that package assets are available.
- Fixes to PsfLauncher scripting.
- Fixes to bring back support for cross architecture projects (where 32-bit exe’s start 64-bit child-processes or visa versa).
- PSF components are now found wherever they are in the package.
- Rewrite of the FileRedirectionFixup FindFile functions.
- Better handling of Ansi/Wide character calls to FRF intercepted functions.
- FRF fixes for what and when to redirect for more consistent behavior.
- Added an important missing file intercept.
- All FRF interfaces now convert to long path form (\\?\C:\…) to avoid 255 character limits in all file calls.
- Restore missing fixes for PrivateProfile calls (calls to handle .ini files).
- Trimming of debug logging.
- RegLegacyFixup fix.
- Reduction in the number of “programming styles” used throughout the code. This is just a start to try to make the code more maintainable and there is much more to be done.
- All Project test apps now work again.
For all you “but I don’t want source” folks out there:
Microsoft has not updated the Nuget package in over a year and a half, and seem unlikely to ever do so again. The NuGet package is primarily intended for developers, but it is basically a zip file containing the binaries that anyone can use. I’d like to create a replacement Nuget package, however I could use someone with experience in creating the Nuget so that it is done in the most useful way possible.
Instead, I have created a release folder with pre-built binaries in a release and debug zip file. I will use vYear.Month.Day format in the naming. (GitHub tagged releases cannot be used without breaking the linkage to the Microsoft source).