示例#1
0
    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);
    }
示例#2
0
    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;
    }
示例#3
0
        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;
        }
示例#4
0
        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);
            }
        }
示例#5
0
        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;
        }
示例#6
0
        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;
            }
        }