private void AssertConfiguratorSetForWindowsVersion()
        {
            if (this.sideloadingConfigurator != null)
            {
                return;
            }

            string kernel32Version;

            try
            {
                // This trick to check Windows version uses the fact that kernel32.dll seems to be reasonably versioned.
                // Builds 10.22000 and higher are Windows 11.
                kernel32Version = FileVersionInfo.GetVersionInfo(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "kernel32.dll")).ProductVersion;
            }
            catch (Exception e)
            {
                throw new ApplicationException("Could not determine the version of your Windows.", e);
            }

            if (!Version.TryParse(kernel32Version, out var version))
            {
                throw new ApplicationException($"Could not determine the version of your Windows. Version of kernel32.dll is {kernel32Version}");
            }

            if (version.Major != 10)
            {
                throw new ApplicationException("MSIX Hero only supports Windows 10 and Windows 11. Your major version is " + version.Major);
            }

            if (version.Build >= 22000)
            {
                // we are on Windows 11
                Logger.Info("Initializing sideloading checker for Windows 11...");
                this.sideloadingConfigurator = new Windows11SideloadingConfigurator();
            }
            else if (version.Build >= 19041)
            {
                // we are on Windows 10 2004 (May 2002 Update) or newer
                Logger.Info("Initializing sideloading checker for Windows 10 2004 (May Update) or newer...");
                this.sideloadingConfigurator = new Windows10From2004SideloadingConfigurator();
            }
            else
            {
                // we are on Windows 10
                Logger.Info("Initializing sideloading checker for Windows 10 versions below 2004 (May Update)...");
                this.sideloadingConfigurator = new Windows10Below2004SideloadingConfigurator();
            }
        }
Example #2
0
 public DeveloperAndSideloadingRecommendationViewModel(ISideloadingConfigurator sideloadingConfigurator)
 {
     this.IsLegacyFlavor          = new Lazy <bool>(() => sideloadingConfigurator.Flavor == SideloadingFlavor.Windows10Below2004);
     this.SideloadingConfigurator = sideloadingConfigurator;
     this.SetStatusAndSummary();
 }