public static bool TryGetFeatures(out List <Feature> features) { var dismFeatures = new Dism(); features = dismFeatures.features; var runner = new ProcessRunner(); dismFeatures.features.Clear(); var task = runner.RunProcess("Dism.exe", "/online /english /get-features", null, dismFeatures.FeatureParser, null).ConfigureAwait(false); return(task.GetAwaiter().GetResult() == Success); }
public void Init() { List <Dism.Feature> features; if (!Dism.TryGetFeatures(out features)) { throw new Exception("Failed to call out to DISM. This installer supports Window 7 SP1 and above on workstations and Windows 2008 R2 and above on servers"); } MSMQFeatures = features.Where(p => p.Name.StartsWith("MSMQ")).ToList(); var msmqServer = MSMQFeatures.Single(p => p.Name.Equals("MSMQ-Server")); InstallState = msmqServer.State == Dism.FeatureState.Enabled ? InstallState.Installed : InstallState.NotInstalled; }
private async void Btn_FixNetFx_Click(object sender, EventArgs e) { Enabled = false; try { var feature = await Dism.EnableWindowsFeatures("NetFx3", DismProgress); // ReSharper disable once SwitchStatementMissingSomeCases switch (feature.FeatureState) { case DismPackageFeatureState.Staged: l_NetFx3State.Text = @"Staged"; l_NetFx3State.ForeColor = Color.Chocolate; btn_FixNetFx.Enabled = true; break; case DismPackageFeatureState.PartiallyInstalled: l_NetFx3State.Text = @"Partially installed"; l_NetFx3State.ForeColor = Color.Chocolate; btn_FixNetFx.Enabled = true; break; case DismPackageFeatureState.Installed: l_NetFx3State.Text = @"Installed"; l_NetFx3State.ForeColor = Color.DarkGreen; btn_FixNetFx.Enabled = false; break; case DismPackageFeatureState.InstallPending: l_NetFx3State.Text = @"Install pending"; l_NetFx3State.ForeColor = Color.DarkGreen; btn_FixNetFx.Enabled = false; break; default: l_NetFx3State.Text = $@"Not supported ({feature.FeatureState})"; l_NetFx3State.ForeColor = Color.Red; btn_FixNetFx.Enabled = false; break; } } catch (Exception ex) { MsgBox.ShowMessage( $"Error: {ex.Message}", @"Celeste Fan Project", MessageBoxButtons.OK, MessageBoxIcon.Warning); } Enabled = true; }
private async void Window_Loaded(object sender, RoutedEventArgs e) { var osInfo = OsVersionInfo.GetOsVersionInfo(); if (osInfo.Major < 6 || osInfo.Major == 6 && osInfo.Minor < 2) { GenericMessageDialog.Show(string.Format(Celeste_Launcher_Gui.Properties.Resources.WindowsFeatureHelperUnsupportedOS, osInfo.FullName), DialogIcon.Warning); Close(); return; } try { foreach (var feature in await Dism.GetWindowsFeatureInfo(new[] { "DirectPlay", "NetFx3" })) { if (string.Equals(feature.Key, "DirectPlay", StringComparison.CurrentCultureIgnoreCase)) { var(statusText, colorLabel, canBeEnabled) = GetLabelStatusForDismFeature(feature.Value); DirectPlayStatusLabel.Text = statusText; DirectPlayStatusLabel.Foreground = new SolidColorBrush(colorLabel); EnableDirectPlayBtn.IsEnabled = canBeEnabled; } else if (string.Equals(feature.Key, "NetFx3", StringComparison.CurrentCultureIgnoreCase)) { var(statusText, colorLabel, canBeEnabled) = GetLabelStatusForDismFeature(feature.Value); NetFrameworkStatusLabel.Text = statusText; NetFrameworkStatusLabel.Foreground = new SolidColorBrush(colorLabel); EnableNetFrameworkBtn.IsEnabled = canBeEnabled; } } } catch (Exception ex) { Logger.Error(ex, ex.Message); NetFrameworkStatusLabel.Text = Celeste_Launcher_Gui.Properties.Resources.WindowsFeatureHelperFeatureNotSupportedError; NetFrameworkStatusLabel.Foreground = new SolidColorBrush(Colors.Red); } }
private async void EnableNetFrameworkBtnClick(object sender, RoutedEventArgs e) { IsEnabled = false; try { var feature = await Dism.EnableWindowsFeatures("NetFx3", OnDismInstallProgress); var(statusText, colorLabel, canBeEnabled) = GetLabelStatusForDismFeature(feature); NetFrameworkStatusLabel.Text = statusText; NetFrameworkStatusLabel.Foreground = new SolidColorBrush(colorLabel); EnableNetFrameworkBtn.IsEnabled = canBeEnabled; } catch (Exception ex) { Logger.Error(ex, ex.Message); GenericMessageDialog.Show(Celeste_Launcher_Gui.Properties.Resources.GenericUnexpectedErrorMessage, DialogIcon.Error, DialogOptions.Ok); } IsEnabled = true; }
private async void WindowsFeatures_Load(object sender, EventArgs e) { try { if (DwmApi.DwmIsCompositionEnabled()) { DwmApi.DwmExtendFrameIntoClientArea(Handle, new DwmApi.MARGINS(10, 10, 10, 10)); } } catch (Exception) { // } //Windows features try { foreach (var feature in await Dism.GetWindowsFeatureInfo(new[] { "DirectPlay", "NetFx3" })) { if (string.Equals(feature.Key, "DirectPlay", StringComparison.CurrentCultureIgnoreCase)) { // ReSharper disable once SwitchStatementMissingSomeCases switch (feature.Value.FeatureState) { case DismPackageFeatureState.Staged: l_DirectPlayState.Text = @"Staged"; l_DirectPlayState.ForeColor = Color.Chocolate; btn_FixDirectPlay.Enabled = true; break; case DismPackageFeatureState.PartiallyInstalled: l_DirectPlayState.Text = @"Partially installed"; l_DirectPlayState.ForeColor = Color.Chocolate; btn_FixDirectPlay.Enabled = true; break; case DismPackageFeatureState.Installed: l_DirectPlayState.Text = @"Installed"; l_DirectPlayState.ForeColor = Color.DarkGreen; btn_FixDirectPlay.Enabled = false; break; case DismPackageFeatureState.InstallPending: l_DirectPlayState.Text = @"Install pending"; l_DirectPlayState.ForeColor = Color.DarkGreen; btn_FixDirectPlay.Enabled = false; break; default: l_DirectPlayState.Text = $@"Not supported ({feature.Value.FeatureState})"; l_DirectPlayState.ForeColor = Color.Red; btn_FixDirectPlay.Enabled = false; break; } } else if (string.Equals(feature.Key, "NetFx3", StringComparison.CurrentCultureIgnoreCase)) { // ReSharper disable once SwitchStatementMissingSomeCases switch (feature.Value.FeatureState) { case DismPackageFeatureState.Staged: l_NetFx3State.Text = @"Staged"; l_NetFx3State.ForeColor = Color.Chocolate; btn_FixNetFx.Enabled = true; break; case DismPackageFeatureState.PartiallyInstalled: l_NetFx3State.Text = @"Partially installed"; l_NetFx3State.ForeColor = Color.Chocolate; btn_FixNetFx.Enabled = true; break; case DismPackageFeatureState.Installed: l_NetFx3State.Text = @"Installed"; l_NetFx3State.ForeColor = Color.DarkGreen; btn_FixNetFx.Enabled = false; break; case DismPackageFeatureState.InstallPending: l_NetFx3State.Text = @"Install pending"; l_NetFx3State.ForeColor = Color.DarkGreen; btn_FixNetFx.Enabled = false; break; default: l_NetFx3State.Text = $@"Not supported ({feature.Value.FeatureState})"; l_NetFx3State.ForeColor = Color.Red; btn_FixNetFx.Enabled = false; break; } } } } catch (Exception) { l_DirectPlayState.Text = @"Not supported (unknow error)"; l_DirectPlayState.ForeColor = Color.Red; } }