TMEditX  The Ultimate MSIX Package Editor plus MsixDeploy To Documentation Index

TMEditX Analysis and Fixes

 

 

 
The TMEditX Analysis menu tab at the top of the display provides access to package analysis results and fixes.  The tool will investigate the intent of the original installer used during recapture along-side the existing packaged manifest.  The tool can determine many types of issues that may be solved by injecting the PSF into the package, as well as issues solvable by modifying the AppXManifest file.

The analysis tab shows the results of this analysis and offers a number of buttons that can be used to address the issues found.

The All Default Fixes button is what you'll normally want to do.  It will perform, in order, all of the fixes shown in the Pre-Psf, Psf, and Recommended Fixes sections.  This might not be exactly what you want on every package, but it is a pretty good strategy to try the defaults first, test; most of the packages will be just fine.  For those not, with a little troubleshooting on that package you can try again using specific fixes or additional editing.

The rest of the page is broken into 5 areas shown in the example below:

  1. Pre-PSF fixes. These are changes that should be made before considering if the PSF is needed.  
  2. PSF. Applying the PSF, if needed.
  3. Recommended fixes. These are fixes that are recommended due to the contents of the package.
  4. Available fixes. These are items not added by default as either they are rarely needed (as workarounds for odd application behaviors) or may be a matter of taste of the organization or packager.
  5. Unfixable items. Things noticed in the package that are unfixable, possibly for now but sometimes never.

When not using the top button to perform the default fixes, you will want to start at the top section and work down.  Often (whether using the default fixes button or manual steps), the software will re-analyze the package based on changes so far, and this might add, remove, or move the placement of some items in the lists.

Many of the items are "Expander" items, indicated by the circle with the down arrow.  Clicking on that button will expand the item to show detail about the proposed fix. 

 

1 - Start with Pre-PSF package cleanup

The tool comes with an impressive exclusion list to help you clean up common unnecessary file and registry items that may slip through the MMPT exclusions.  And of course, you can improve this list yourself.  The advantage of doing this here is that you usually install TMEditX on a machine that you don't constantly revert so you don't lose your improved list.

At the top of the analysis page will be a button to perform the package cleanup and then perform a re-analysis of the remaining package.  You want to run this first, as some of those items may trigger additional fixups, or additional configuration in the fixups, that become unnecessary when the cleanup is performed later.  By the way, you can view all of the file/registry entries to be removed by expanding the specific buttons at the bottom of the analysis page.

If you captured a portable app, or a Squirrel updater was detected, these are also addressed in this cleanup before considering the PSF.  

After the Pre-PSF changes are made, the analysis is refreshed to adjust for those changes.

 

2 - Next add the PSF, if needed

If the Psf is to be injected into the package, this should be performed prior to other available actions.

If analysis shows that the PSF is recommended, a list of fixups and reasons for them are shown. The analysis is not able to find all application conditions that lead to needing fixups. The analysis is based upon evidence of file and registry items written by the captured vendor installer, but cannot detect runtime issues such as those leading to need the DynamicLibraryFixup.

You may add the PSF whether or not analysis suggests it. The button will bring up a new window with appropriate settings for your package.  If needed, such as you want to add a package script, you may change configuration for a Psf component, or add or remove components. 


This tool contains both 32 and 64 bit versions of following components:
•    PsfLauncher
•    PsfFtaCom
•    PsfRuntime
•    TraceFixup
•    PsfMonitor
•    FileRedirectionFixup
•    MfrFixup
•    DynamicLibraryFixup
•    RegLegacyFixup
•    EnvVarFixup
•    WaitForDebuggerFixup
•    StartingScriptWrappers

When you save the changes, the necessary files (and dependencies) will be added to the package, the config.json file will be generated, and the AppXManifest file will be updated to have the shortcuts point to the appropriate launchers.  If the MfrFixup was included and the default ILV-Aware Mode used, the InstalledLocationVirtualization extension will also be added to the AppXManifest.  If any of the target exe files have internal/external manifests for elevation, it's companion PsfLauncher will get an external manifest that elevates instead.

3 - Then, perform the Recommended actions

These items are based on what was found in the package that needs fixing.  When manually applying these, always start at the top of the list and work down.

4 - Consider the Available actions

These items are not normally needed for most packages and customers.  Some, like the Copy DLLs, are alternate methods of fixing up packages that are necessary for the odd application for which DynnamicLibraryFixup doesn't solve dll not found issues.  Others, such as Mark apps to single instance, are rarely desirable but necessary for a small number of applications to prevent the end-user from launching two copies of the app simultaneously.

5 - Review the Unfixable items

These items represent integrations attempted by the installer, or possibly unrelated background activity that was captured during the monitoring period of the packaging tool, that there is no (current) method to fix.  Possible causes are:

  • There is a documented AppXManifest schema extension that would apply, but we cannot use it.  It might be that no OS support exists yet, that the documentation is incomplete or known to be incorrect and we don't know how to use it yet, or there is just a bug in the implementation preventing use.
  • Only a subset of the necessary requirements for an integration were present in the package capture.  A great example of this is when the Microsoft Edge updater kicks in during monitoring.  While most of the file and registry changes made by that updater will be excluded via the exclusion lists, associated COM registrations cannot be.  So when that happens we detect a COM Server registration that we cannot support because the associated file is not present.  We also see commercial installers, I'm talking about you Adobe Reader, that continue to register COM components that they don't add to the system because it is 64-bit.
  • The feature is no longer supported on modern OSs.  A great example is, you guessed it, Adobe Reader that continues to register a shell extension that has been unsupported in the OS ever since Windows XP.  There is no AppxManifest support for this shell extension.

We show these items because they may or may not be important.  Those under the first bullet item should cause you to take more care in the testing of the application.  Often, the major functionality of the app is fine, but unless the app is fully tested an end-user may find the problem weeks after deployment.

Note that items in any of these sections may appear greyed out because while there is detection, a fix is not currently possible.  This may be because the fix has already been applied, a competing fix has already been applied, any of the reasons for the Unfixable list.

 

Specific Fixup Items

The remainder of this article covers many fixups applied by TMEditX, based on when they appear.

As part of opening the package

There are some changes made as part of opening the package.  These are mandatory.


Incorrect VFS Mappings

Certain third-party tools might not use the correct VFS mappings.  For example we may see a path as "VFS/Profile/AppData/Local" when it should be "VFS/LocalAppData". These paths not only mess up the analysis and fixups of TMEditX, they also affect core OS features.  This fixup actually occurs during the unpacking of the package automatically.


Short-Name Paths

App-V supported short-names on files, but MSIX does not.  Converted App-V packages will sometimes have short-name references in the registry, but also the VFS subfolder (such as VFS\ProgramFilesX86[~]").  Since we can't add the short-names to MSIX, we replace the short-names from both the registry entries and file system with the long name.  This fixup also occurs during the unpacking of the package automatically.

Pre-PSF Changes


Remove Advanced Installer PSF

If the package was created by Advanced Installer, they add their own version of the PSF to the package.  These packages are also fixable by TMEditX to improve the apps, but it is necessary to first remove their PSF.  When detected, this fixup will be placed prior to the other Pre-PSF fixups.


Registry / File Cleanup

TMEditX has an improved exclusion list.  You can use the expander to see the items that will be removed. This is part of the Pre-PSF fixups.

 


Squirrel Updater Cleanup

The Squirrel updater is popular in open source code.  When used, the shortcut points to the updater program, which looks for updates (possibly downloading them into a new folder in the user's profile) and then calls the latest version.  This fixup, which is in the Pre-Psf section, will point the shortcut to the installed version and remove the updater from the package.


Remove Uninstallers

TMEditX will detect executables with other names that appear to be uninstallers and updaters. This is part of the Pre-PSF fixups.


Apps with Startup Folders

TMEditX will detect when the original application shortcut was in a sub-folder but this was not applied in the AppXManifest.

The application's EntryPoint record will be updated to the newer UAP3 schema and the folder applied.  If the original app had a multi-level subfolder structure, the AppXManifest extension only supports one level so only the top level folder is added.  This is part of the Pre-Psf Fixups.

Portable App Detection

The recapture of portable apps is listed as a notification.  No fix is directly attributable to the posted item, however the existence of this will trigger other fixes to be added and it may not be obvious why without this notification.

 

Recommended Fixes


Shortcut from Startup Folder missing

The packaging tool currently misses shortcuts that were added to the Startup folder of the start menu.  These shortcuts are intended to run automatically when the user logs in. 

This fix will add them into the manifest extension. 

Shortcut Link to URL

While a traditional installer can place a .url file in the start menu, which is properly handled by the Microsoft Packaging Tool and TMEditX through the addition of the PSF, an application that places a .lnk file with a target of a web reference is not.  This Recommended fixup will fix the application.

FTAs Needing Shell Verb Command Manifest Support

The packaging tool currently misses certain Shell Verb Commands. This can occur because of how the installer performed the registration, but also the type of file association might be the cause, or having multiple shell verbs against the same file type.

This fix will add them into the manifest. 

Incorrect Shell Verb Default

Because the packaging tool misses many of the shell verbs, they sometimes make the wrong verb the default.  This Recommended fixup addresses that.

Shell Extension Context Menus needing Manifest support.

The packaging tool misses certain Shell Extensions Context Menus that are supportable according to the manifest schemas. This fix will add them into the manifest, however further OS support might be required.

Shell Extension Property (Sheet) Handler needing Manifest support.
Shell Extension Thumbnail Handler needing Manifest support.
Shell Extension Preview Handler needing Manifest support.
Shell Extension Icon Handler needing Manifest support.
Shell Extension Drag-and-drop Handler needing Manifest support.
Shell Extension Property-Metadata Handler needing Manifest support.

The packaging tool misses certain Shell Extensions that are supportable. Unlike the registry-based registration used by traditional shell extensions, each requires a specific AppXManifest extension. These fixes will add the supported ones into the manifest, however not all metadata property types are supported in the AppXManifest schemas, so the implementation may ignore certain data items seen in the traditional install.  These appear in the Recommended section.

Shell Extension Protocol Handlers needing Manifest support.

The packaging tool misses certain Shell Extensions that are supportable. This fix will add them into the manifest if possible. Currently exe based protocol handlers work, but COM based protocol handlers have issues and are not included in this Recommended fixup.

COM Typelib needing Manifest support.
COM Interface needing Manifest support.
COM CLSID needing Manifest support.
COM Inproc registered exe server needing Manifest support.
COM ProgId needing Manifest support.

These are various COM registrations found in the registry that were skipped by the Packaging Tool but are fixable.  They also appear in the Recommended section.

 
Fonts needing Manifest support.

The packaging tool misses package Fonts that are supportable. This fix will add them into the manifest.


AppPath Registrations needing Manifest support as LoaderSearchOrder.

The packaging tool misses packages with App Paths that are supportable. There are two different issues that this might cause, one for dll search and one for exe search.


This fix will address the DLL search issue by adding them into into the manifest by adding a package level LoaderSearchOrder. Generally, adding the DynamicLibraryFixup to the package will also solve dll loading issues and you may use either (or both).


AppPath Registrations may need Manifest support as ExecutionAlias.

The packaging tool misses packages with App Paths that are supportable. There are two different issues that this might cause, one for dll search and one for exe search.


This fix will address the EXE search issue by adding them into into the manifest by adding an application level ExecutionPathAlias. The fix ensures that the app is findable when trying to run the command by just using the filename of the exe and not the path.

Service with Command-line Arguments

The packaging tool ignores any command line arguments for Windows Services that are exe based.  This fixup restores the missing arguments.


ETW Manifest Files may need Manifest support.

The packaging tool misses packages with Event Trace for Windows Manifest files that will be someday supported.

  • At this time the support exists in the new schemas, but has yet to be added to the operating system (AppInstaller). 
  • Adding the support will not harm the package, and should work once OS support is added.  Of course, with any unsupported future feature, you don't get the functionality yet.  And, of course, there is a chance that things may change before this support arrives.
  • Without this support, the packaged application should be able to log events, but the formatter will be missing making it much more difficult to understand the logged data. 


Firewall Configuration rules may need Manifest support.

The packaging tool currently filters out the registry items associated with Windows Firewall Rule configuration (although they are not part of the registry filter list). So you will probably never see this item appear any more.  If/When this bug is fixed it is anticipated that it still might not migrate those settings into the AppXManifest.  If they show up in the registry and are not found in the Manifest, this will be detected and remediated.


UI Access Detected.

Some traditional apps that do things like capture images from the desktop, traditionally required an internal manifest entry in the exe called "UI Access".  This entry allowed the application to perform the action without a UAC prompt for elevation in certain situations.  This fixup adds the screen capture capability to the AppXManifest in the hope of allowing this capability.


Webview2 Requirement Detection.

We can detect if an application wants to use Edge WebView 2 for http access based on a required interface dll that will be in the package. This fixup will add a package dependency to WebView 2 into the AppXManifest, along with the Internet Client Capability that is also needed.  Be aware that Package Dependencies may or may not be automatically triggered to be installed when you install this package.  It depends on your deployment technology used.

Missing File

A file referenced in the AppXManifest is no longer in the package.  The AppXManifest will be adjusted by this fixup.

Missing Empty Folders

App-V had a feature that created empty folder references in the file system.  This was not done in the package files, but in a special file called FileSystemMetaData.xml.

When capturing apps that create an empty folders, the Microsoft MSIX Packaging Tool does this differently, adding a 0-byte dummy txt file in the main file system references.  Not exactly empty but close.  But this is the only way to get the folder created in the package.

When converting an App-V package, the Microsoft MSIX Packaging Tool just ignores these.  This fixup detects the references from the FileSystemMetaData.xml file and adds 0-byte dummy files just like the packaging tool would have done if you repackaged the app instead of converting it.

Bad Lnk files and Desktop7 Shortcuts in the AppXManifest

An update to the Microsoft MSIX Packaging Tool made an attempt to add shortcuts to the desktop as well as simultaneously allow for command line arguments.  Unfortunately, the implementation is buggy.  Sometimes the lnk file isn't present at the location indicated, sometime the argument references forget that their may be file paths that had to be changed, or were incorrectly changed using registry style VFS pathing instead of file system VFS pathing.

This fixup does a number of things depending on the situation:

  • If the Psf is in place, the Psflauncher will handle the arguments and this element can be removed (unless it was for a shortcut to be placed on the desktop).
  • If it was a desktop shortcut, by default the item will also be removed because we never want these.
  • If it was a desktop shortcut and TMEditX was configured to not remove them, it will be left in place but the lnk file, and all file references are fixed.

Single Shortcut with Folder

If there were multiple shortcuts under a folder originally, we may have added the folders as part of the Pre-Psf Fixup.  Other fixups may have removed shortcuts, so if we end up with a single shortcut with a folder, we'll remove the folder.

Unnecessary Schema Removal

If a schema extension is no longer referenced in the AppXManifest, its definition will be removed from the top of the AppXManifest.

 

 Possibly Recommended or Available Fixups

These fixups may appear either in the Recommended or Available sections.  This might depend on tool configuration or are dependent on other fixups being present or not.


Control Panel Applet needing Manifest support.

The packaging tool misses certain Shell Extensions that are supportable. This fix will add them into the manifest.


Is Candidate for InstalledLocationVirtualization.

Fixup adds ILV to the AppXManifest.


Is Candidate for Disable Electron Sandbox.

If the EnvVarFixup is present in the package from the PSF, add the environment variable to disable the Electron Sandbox feature.

 

Available Fixups 


Disable Multiple Instances.

Requires the PSF to be present.  If added to the package, it will instruct PsfLauncher and PsfFtaCom to not allow multiple instances of the same target application in the user session simultaneously.

 

Copy Dlls to System Folders

Fixup locates all dlls in the package, analyzes them for bitness, and makes a copy of each in the appropriate VFS/Systemx86 or CFS/SystemX64 folder so that they will be found. Used when the PSF DynamicLibraryFixup of the Psf doesn't solve a dll not found issue. 

 

Copy Dlls to Root Folder

Fixup locates all dlls in the package and makes a copy of each in the root folder of the package so that they will be found.  This fixup isn't available if there are multiple dlls with the same name (use previous fix instead). Used when the PSF DynamicLibraryFixup of the Psf doesn't solve a dll not found issue. 

Is Candidate for AllowElevation

Fixup adds the AllowElevation restricted capability to be added to the AppXManifest.  Only needed when an un-elevated process running in the container needs to start a new process with elevation.


Registration-Free COM needing Manifest Support.

There is a form of COM that identifies com dependencies in a exe.config file, allowing the app to find the com dependency even if it is not registered.  If that dll is part of the package it might not be found under MSIX  This fixup appears when such a config file is recognized.  The fixup will attempt to add those COM dependencies that are part of the package into the AppXManifest COM registration.  This item should be considered experimental, so test thoroughly.


Has Internal AppInstaller File.

Packages received from vendors may include an AppInstaller file as the modern way to control updates.  If you don't want the application updates when the vendor posts an update, you can use this fixup to remove it from the vendor package.


Is Candidate for packageWriteRedirectionCompatibilityShim.

This is an AppXManifest property that is available and seems to be an alternative to the PSF FileRedirectionFixup, MfrFixup, and InstalledLocationVirtualization.  It is not often used, but if nothing else works for a certain package you could give it a try.


Package Has Java.

This is now actually handled via the PSF.  The JavaBlocker feature is added to the RegLegacyFixup to block access to locally installed java runtimes.


.Net Runtime Requirement Detected.

We detected components in the package that indicate there is a requirement for a .Net Runtime Dependency.  This fixup will add the dependency to the Package Dependency list.

 

Detections without fixes not shown

While the software detects these, we don't expose them at this time as they are a work in progress.

App has PkgDef files

These files are a form on dependency linkages.  We think that we might need to do something with them, but as yet we haven't detected a real problem.  It is being used internally for testing at this time.

 

Unfixable Items

Com Typelib lacking Manigest Registration Unfixable
Com Interface lacking Manifest Registration Unfixable
Com CLSID Lacking Manifest Registration Unfixable
Com ProgID Lacking Manifest Registration Unfixable

There remains some native COM registrations that we can't handle. This is mostly due to confusing and incomplete documentation by Microsoft, but it may also be that additional extension support might be needed on some of these. We continue to target these as we find them.

Some of these however, are due to an unclean capture that picked up some background noise, or an installer that was performing incomplete registration of something they no longer use.


FTAs needing Shell Manifest Support Unfixable.

With the exception of the Shell Extension Context Menus, you cannot currently target certain "special" file types in Shell Verb Commands.  This includes the wildcard file type (*), but also drive, folder, and directory.

Shell Extension ContextMenu Unfixable
Shell Extension Data Handler Unfixable
Shell Extension Drop Handler Unfixable
Shell Extension Property Handler Unfixable
Shell Extension Thumbnail Handler Unfixable
Shell Extension Preview Handler Unfixable
Shell Extension Icon Handler Unfixable
Shell Extension DragAndDrop Handler Unfixable
Shell Extension Property Metadata Handler Unfixable
Shell Extension Copy Hook Handler Unfixable
Shell Extension Column Handler Unfixable
Shell Extension Property Sheet Handler Unfixable
Shell Extension Image Handler Unfixable
Shell Extension StructuredStorage Handler Needing Manifest support Unfixable

Many of these Shell Extension types have no AppXManifest support.  Others do, but if the FTA type is not supported (as mentioned in the previous item) then we still can't support the shell extension in the MSIX package.

 

AppPaths Needing ExecutionAlias Unfixable

Normally these are fixable, but if the app is no longer listed via shortcuts we can't.  We might be able to handle this some day, but it isn't a priority until a customer shows us a case that needs it.

Shortcut to missing target

If the target of the shortcut is not in the package, it can't work.  You probably want to remove the application in the Manifest editor, but we'd rather you figure this one out.

Bad Oops in package

This covers some situations where TMEditX detects something is wrong, but really has no idea what to do about it.  You might just want to start over with a new capture.

Unsupported Executable

Exe or DLL files were detected that are not generally valid on an x64 operating system.  This includes ARM and ARM64 items, but also 16-bit components.

The ARM/ARM64 components were probably incorrectly added to the system by the vendor installer and are not used, so those are OK.

The 16-bit components might indicate the need of a 16-bit emulator like DosBox.  But again, you should already know this if you have deployed this app natively. 

 

Shell Extension PinToTaskbar Needing Manifest support Unfixable.

Adds PinToTaskbar support to the AppXManifest.  Not supported by TMEditX yet.

 

Shell Extension PinToStartMenu Needing Manifest support Unfixable.

Adds PinToStartMenu support to the AppXManifest.  Not supported by TMEditX yet.

 

App-V Script Detected.

Warning issued when detected.  Manual adaptation to MSIX scripting may be needed, but review if you really need a script anymore.