SOLVED

Differentiating between appx and msix packages

%3CLINGO-SUB%20id%3D%22lingo-sub-356092%22%20slang%3D%22en-US%22%3EDifferentiating%20between%20appx%20and%20msix%20packages%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-356092%22%20slang%3D%22en-US%22%3E%3CP%3EIs%20there%20a%20way%20to%20differentiate%20between%20the%20appx%20and%20msix%20packages%2C%20other%20than%20checking%20the%20extension%20of%20the%20package%3F%3C%2FP%3E%3CP%3E%3CSPAN%3EI%20was%20looking%20for%20some%20way%20to%20check%20if%20the%20package%20was%20actually%20created%20as%20a%20msix%20package%2C%20or%20was%20just%20renamed%20from%20.appx%20to%20.msix%2C%20but%20could%20not%20find%20anything%20in%20the%20content%20which%20could%20help%20me%20check%20this.%20%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3CSPAN%3EPlease%20guide%20if%20I'm%20missing%20something.%3C%2FSPAN%3E%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-359423%22%20slang%3D%22en-US%22%3ERe%3A%20Differentiating%20between%20appx%20and%20msix%20packages%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-359423%22%20slang%3D%22en-US%22%3E%3CP%3EI%20think%20that%20given%20the%20design%2C%20the%20intent%20is%20that%20you%20would%20look%20directly%20at%20the%20MIN%20version%20and%20Max%20Test%20version%20associated%20with%20the%20package%20rather%20than%20directly%20looking%20at%20the%20question%20%22is%20it%20appx%20or%20msix%22.%26nbsp%3B%3C%2FP%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%3EThis%20might%20not%20meet%20all%20the%20situations%20(challenges%20like%20the%20new%20deployment%20possibilities%20to%20back%20rev%20OS%20come%20to%20mind)%2C%20and%20I%20think%20checking%20the%20manifest%20for%20references%20to%20the%20msix%20schema%20would%20be%20the%20most%20reliable%20method%20for%20someone%20to%20determine.%26nbsp%3B%20But%20in%20the%20end%20if%20it%20doesn't%20meet%20the%20min%2Fmax%20info%20above%2C%20the%20point%20might%20just%20be%20moot.%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-357056%22%20slang%3D%22en-US%22%3ERe%3A%20Differentiating%20between%20appx%20and%20msix%20packages%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-357056%22%20slang%3D%22en-US%22%3E%3CP%3EFrom%20a%20packaging%20perspective%20you%20don't%20really%20need%20to%20differentiate.%20The%20runtime%20will%20pick%20up%20currently%20based%20on%20the%20manifest%20declarations.%26nbsp%3B%20It%20won't%20affected%20deployment%20since%20they%20share%20a%20common%20deployment%20stack.%26nbsp%3B%20Think%20of%20a%20.appx%20as%20a%20really%20restrictive%20MSIX%20file.%20MSIX%20will%20light%20up%20new%20feature%20sets%20and%20includes%20out%20of%20band%20items%20like%20the%20package%20support%20framework.%20%3CBR%20%2F%3E%3CBR%20%2F%3EJohn.%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-356754%22%20slang%3D%22en-US%22%3ERe%3A%20Differentiating%20between%20appx%20and%20msix%20packages%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-356754%22%20slang%3D%22en-US%22%3E%3CP%3EAs%20per%20the%20%3CA%20href%3D%22https%3A%2F%2Fdocs.microsoft.com%2Fen-us%2Fwindows%2Fmsix%2Fmsix-1709-and-1803-support%22%20target%3D%22_self%22%20rel%3D%22noopener%20noreferrer%22%3Edocument%3C%2FA%3E%2C%20MSIX%20is%20supported%20on%20Win%2010%201709%20and%20above.%20However%20APPX%20was%20supported%20on%20versions%20earlier%20than%201709%20as%20well.%20Now%20there%20is%20no%20option%20to%20the%20manual%20tool%20(makeappx.exe)%20that%20guides%20it%20to%20generate%20MSIX%20or%20APPX.%3C%2FP%3E%3CP%3EHow%20can%20I%20be%20indeed%20sure%20that%20I%20have%20generated%20a%20MSIX%20package%20and%20not%20an%20APPX%20package.%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-356360%22%20slang%3D%22en-US%22%3ERe%3A%20Differentiating%20between%20appx%20and%20msix%20packages%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-356360%22%20slang%3D%22en-US%22%3E%3CP%3EWhat%20specifically%20would%20you%20like%20to%20determine%20if%20it%20was%20an%20.appx%20vs%20an%20MSIX%20package%3F%26nbsp%3B%20From%20a%20functionality%20perspective%20all%20of%20.appx%20was%20inherited%20by%20MSIX.%26nbsp%3B%20However%2C%20MSIX%20is%20not%20fully%20backward%20compatible%20to%20.appx.%26nbsp%3B%26nbsp%3B%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-1712870%22%20slang%3D%22en-US%22%3ERe%3A%20Differentiating%20between%20appx%20and%20msix%20packages%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-1712870%22%20slang%3D%22en-US%22%3E%3CP%3E%26gt%3B%26nbsp%3B%3CSPAN%3ENow%20there%20is%20no%20option%20to%20the%20manual%20tool%20(makeappx.exe)%20that%20guides%20it%20to%20generate%20MSIX%20or%20APPX.%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%3CSPAN%3EIn%20fact%2C%20there%20is.%20It's%20%60MinVersion%60%20attribute%20of%20%60TargetDeviceFamily%60%20element%20in%26nbsp%3BAppxManifest.xml.%20If%20it's%20high%20enough%2C%20MSIX%20is%20generated%2C%20otherwise%20APPX.%3C%2FSPAN%3E%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-1720549%22%20slang%3D%22en-US%22%3ERe%3A%20Differentiating%20between%20appx%20and%20msix%20packages%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-1720549%22%20slang%3D%22en-US%22%3E%3CP%3E%3CA%20href%3D%22https%3A%2F%2Ftechcommunity.microsoft.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F809005%22%20target%3D%22_blank%22%3E%40mikekaganski%3C%2FA%3E%26nbsp%3BIn%20retrospect%2C%20I%20gave%20the%20wrong%20answer%20to%20the%20original%20question.%3C%2FP%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%3ERather%20than%20filename%2C%20one%20should%20look%20for%20the%20RunFullTrust%20capability%20in%20the%20AppXManifest%20file.%26nbsp%3B%20This%20is%20the%20one%20thing%20that%20allows%20Win32%20and%20.Net%20Framework%20code%20to%20be%20able%20to%20run%20inside%20the%20container.%26nbsp%3B%20Yes%2C%20the%20MinVersion%20also%20needs%20to%20be%20at%20a%20given%20level%2C%20but%20even%20that%20level%20is%20now%20out%20of%20support%2C%20and%20AppX%2FUWP%20apps%20can%20use%20the%20latest%20minversion%20as%20well.%3C%2FP%3E%3C%2FLINGO-BODY%3E
Occasional Contributor

Is there a way to differentiate between the appx and msix packages, other than checking the extension of the package?

I was looking for some way to check if the package was actually created as a msix package, or was just renamed from .appx to .msix, but could not find anything in the content which could help me check this.

Please guide if I'm missing something.

6 Replies

What specifically would you like to determine if it was an .appx vs an MSIX package?  From a functionality perspective all of .appx was inherited by MSIX.  However, MSIX is not fully backward compatible to .appx.  

As per the document, MSIX is supported on Win 10 1709 and above. However APPX was supported on versions earlier than 1709 as well. Now there is no option to the manual tool (makeappx.exe) that guides it to generate MSIX or APPX.

How can I be indeed sure that I have generated a MSIX package and not an APPX package.

best response confirmed by Andy Liu (Microsoft)
Solution

From a packaging perspective you don't really need to differentiate. The runtime will pick up currently based on the manifest declarations.  It won't affected deployment since they share a common deployment stack.  Think of a .appx as a really restrictive MSIX file. MSIX will light up new feature sets and includes out of band items like the package support framework.

John.

I think that given the design, the intent is that you would look directly at the MIN version and Max Test version associated with the package rather than directly looking at the question "is it appx or msix". 

 

This might not meet all the situations (challenges like the new deployment possibilities to back rev OS come to mind), and I think checking the manifest for references to the msix schema would be the most reliable method for someone to determine.  But in the end if it doesn't meet the min/max info above, the point might just be moot.

Now there is no option to the manual tool (makeappx.exe) that guides it to generate MSIX or APPX.

 

In fact, there is. It's `MinVersion` attribute of `TargetDeviceFamily` element in AppxManifest.xml. If it's high enough, MSIX is generated, otherwise APPX.

@mikekaganski In retrospect, I gave the wrong answer to the original question.

 

Rather than filename, one should look for the RunFullTrust capability in the AppXManifest file.  This is the one thing that allows Win32 and .Net Framework code to be able to run inside the container.  Yes, the MinVersion also needs to be at a given level, but even that level is now out of support, and AppX/UWP apps can use the latest minversion as well.