Проверьте все части. windows функции включены и отключены. Net Framework - PullRequest
0 голосов
/ 17 июня 2020

Я использую этот сценарий для проверки Windows Feature. Net Framework 4.x включен

    private static bool CheckWindowsFeatureNetFx4()
    {
        try
        {
            Process p = CreateProcess();
            p.StartInfo.FileName = "powershell.exe";
            p.StartInfo.Arguments = "Get-WindowsOptionalFeature -Online -FeatureName NetFx4";
            p.Start();
            var stand = p.StandardOutput.ReadToEnd();
            var err = p.StandardError.ReadToEnd();
            var i1 = stand.IndexOf("State");
            var i2 = stand.IndexOf("CustomProperties");
            if (i1 < i2 && (err == null || err == ""))
            {
                var state = stand.Substring(i1 + 19, i2 - i1 - 21);
                Console.WriteLine(state);
                if (state.ToLower() == "enabled")
                {
                    return true;
                }
            }
        }
        catch (Exception)
        {
        }
        return false;

И включите это следующим образом:

    private static void RunWindowsFeatureNetFx4(Session session)
    {
        Process p = CreateProcess();
        try
        {
            p.StartInfo.FileName = "powershell.exe";
            p.StartInfo.Arguments = "Install-WindowsFeature .NET-Framework-45-Features";
            p.Start();
            p.StandardOutput.ReadToEnd();
            CheckWindowsFeatureNetFx4(session);
        }
        catch (Exception)
        {
            session["TurnOnWindowsFeature4"] = "false";
        }
    }

Проблема это не проверять "подфункции", и только основная функция разрешена, возвращает истину. Я пытался использовать этот метод RunWindowsFeatureNetFx4, когда не все части включены, и он не включает остальные функции.

1 Ответ

0 голосов
/ 19 июня 2020

Мое решение: я создал словарь со всеми именами функций, которые включены в. Net Framework 3.5 и 4.x. Я взял их, чтобы сравнить возвращаемое значение при включении и выключении функций. Затем отметьте все включено и удалите его из словаря. Затем включите все функции в правильном порядке. Порядок важен.

Этот список работает для net framework 4.8

    static void Main(string[] args)
    {
        AddFeature();
        CreateFileFeature();
        RemoveEnable();
        TurnOnFeatures();
    }

    private static void TurnOnFeatures()
    {
        try
        {
            Process p = CreateProcess();
            p.StartInfo.FileName = "cmd.exe";
            foreach (var item in featureToEnable)
            {
                p.StartInfo.Arguments = "/C DISM /online /enable-feature /featurename:" + item.Value + " /NoRestart";

                p.Start();

                var a = p.StandardOutput.ReadToEnd();
                var b = p.StandardError.ReadToEnd();
                Console.WriteLine(item.Key);
            }

        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }
    }
    private static void RemoveEnable()
    {
        for (int i = 0; i < 17; i++)
        {
            if (featureToEnable.ContainsKey(i))
                if (featureAllEnable.Any(x => x == featureToEnable[i]) == true)
                    featureToEnable.Remove(i);
        }
    }
    private static void AddFeature()
    {
        featureToEnable.Add(0, "NetFx3");
        featureToEnable.Add(1, "NetFx4-AdvSrvs");
        featureToEnable.Add(2, "NetFx4Extended-ASPNET45");
        featureToEnable.Add(3, "WCF-Services45");

        featureToEnable.Add(4, "WCF-TCP-PortSharing45");
        featureToEnable.Add(5, "WCF-Pipe-Activation45");
        featureToEnable.Add(6, "WCF-TCP-Activation45");
        featureToEnable.Add(7, "WCF-MSMQ-Activation45");

        featureToEnable.Add(8, "IIS-NetFxExtensibility");
        featureToEnable.Add(9, "IIS-NetFxExtensibility45");
        featureToEnable.Add(10, "WAS-NetFxEnvironment");
        featureToEnable.Add(11, "IIS-ASPNET45");
        featureToEnable.Add(12, "IIS-ManagementService");
        featureToEnable.Add(13, "IIS-ASPNET");
        featureToEnable.Add(14, "WCF-HTTP-Activation45");
        featureToEnable.Add(15, "WCF-HTTP-Activation");
        featureToEnable.Add(16, "WCF-NonHTTP-Activation");

    }

    private static void CreateFileFeature()
    {
        Process p = CreateProcess();
        try
        {
            p.StartInfo.FileName = "cmd.exe";

            p.StartInfo.Arguments = "/C DISM /online /get-features /format:table";
            p.Start();

            var a = p.StandardOutput.ReadToEnd();

            var b = p.StandardError.ReadToEnd();

            List<string> s = new List<string>();
            int endLine = output.IndexOf("\r\n");
            while (output.Length > 0)
            {
                if (endLine == 0)
                {
                    output = output.Substring(2, output.Length - 2);
                }
                else
                {
                    s.Add(output.Substring(0, endLine));
                    output = output.Substring(endLine, output.Length - endLine);
                }
                endLine = output.IndexOf("\r\n");
            }
            foreach (var item in s)
            {
                if (item.ToLower().Contains("enable"))
                {
                    int ind = item.IndexOf(" ");
                    featureAllEnable.Add(item.Substring(0, ind));
                }
            }
        }
        catch (Exception)
        {

        }
    }

Edit:

Список для net framework 4.7.2. Проверяю фреймворк на p c и использую соответствующий список

        featureToEnable.Add(0, "NetFx3");
        featureToEnable.Add(1, "NetFx3ServerFeatures");
        featureToEnable.Add(2, "NetFx4");
        featureToEnable.Add(3, "NetFx4ServerFeatures");
        featureToEnable.Add(4, "NetFx4Extended-ASPNET45");
        featureToEnable.Add(5, "WAS-NetFxEnvironment");
        featureToEnable.Add(6, "IIS-NetFxExtensibility");
        featureToEnable.Add(7, "IIS-NetFxExtensibility45");
        featureToEnable.Add(8, "IIS-ASPNET45");
        featureToEnable.Add(9, "IIS-ManagementService");
        featureToEnable.Add(10, "WCF-HTTP-Activation45");
        featureToEnable.Add(11, "WCF-TCP-Activation45");
        featureToEnable.Add(12, "WCF-Pipe-Activation45");
        featureToEnable.Add(13, "WCF-MSMQ-Activation45");
        featureToEnable.Add(14, "WCF-HTTP-Activation");
        featureToEnable.Add(15, "WCF-NonHTTP-Activation");
        featureToEnable.Add(16, "WCF-TCP-PortSharing45");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...