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(); } }
public DeveloperAndSideloadingRecommendationViewModel(ISideloadingConfigurator sideloadingConfigurator) { this.IsLegacyFlavor = new Lazy <bool>(() => sideloadingConfigurator.Flavor == SideloadingFlavor.Windows10Below2004); this.SideloadingConfigurator = sideloadingConfigurator; this.SetStatusAndSummary(); }