Dism не распознается в оболочке CMD в С#

Я пытаюсь включить dotnet 3.5 для зависимости от другого приложения, которое я устанавливаю. Проблема в том, что моя командная оболочка, которую я использую, выдает эту ошибку «dism» не распознается как внутренняя или внешняя команда, исполняемая программа или пакетный файл». но если я скопирую и вставлю строку, которую я передаю в оболочку cmd:

Dism /online /LogPath:C:\Users\HollyPlyler\source\repos\installerOptimized\installerOptimized\bin\Debug\\Logs\DSIMEnableDotNet.log /LogLevel:4 /Enable-Feature /FeatureName:NetFx3

Это работает нормально.

Вот мой класс CMD:

 class CommandLineTool
    {
        public async Task Com(String command, string logName)
        {
            Console.WriteLine("received " + command);
            System.Diagnostics.Process process = new System.Diagnostics.Process();
            System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
            startInfo.UseShellExecute = false;
            startInfo.CreateNoWindow = false;
            startInfo.RedirectStandardOutput = true;
            startInfo.UseShellExecute = false;
            startInfo.FileName = "CMD.exe";
            startInfo.Arguments = "/c " + command;
            process.StartInfo = startInfo;

            Task t = Task.Run(()=>process.Start());
            t.Wait();
            string output = process.StandardOutput.ReadToEnd();
            Console.BackgroundColor = ConsoleColor.Black;
            if (output.Contains("0/1"))
            {
                Console.ForegroundColor = ConsoleColor.Yellow;
                installerOptimized.install.success = false;
            }
            else
            {
                Console.ForegroundColor = ConsoleColor.Green;
                installerOptimized.install.success = true;
            }
            Console.WriteLine(output);
            string success = installerOptimized.install.success ? "successful" : "unsuccessful";
            System.IO.File.WriteAllLines("Logs/" + logName +"_" + success + ".txt", output.Split('\n'));
            process.WaitForExit();
    }
}

person Holly Plyler    schedule 10.01.2019    source источник
comment
Нужно ли запускать cmd.exe /c dism ... вместо dism ...?   -  person Joe Sewell    schedule 10.01.2019
comment
Я мог бы попробовать это. Спасибо.   -  person Holly Plyler    schedule 10.01.2019
comment
Кажется, работает, но для завершения требуется некоторое время. Я дам вам знать через секунду.   -  person Holly Plyler    schedule 10.01.2019
comment
Нет, просто зависает навсегда. Не работает ни одна из других команд cmd, которые мне нужны. Так что /C необходим.   -  person Holly Plyler    schedule 11.01.2019
comment
Вы смотрели на переменную среды пути в оболочке cmd, которая терпит неудачу?   -  person Flydog57    schedule 11.01.2019
comment
Это не оболочка выходит из строя. Он выполняет около 20 вызовов Chocolatey CMD просто отлично. Это просто вызов Dism, который терпит неудачу.   -  person Holly Plyler    schedule 11.01.2019
comment
Странная часть, я могу поклясться, что это работало вчера.   -  person Holly Plyler    schedule 11.01.2019


Ответы (1)


Хорошо, я заставил это работать таким образом. Создав второй класс для DISM.exe. Я мог бы объединить их и добавить последнюю переменную для оптимизации.

 class Dism
    {
        public async Task Com(String command, string logName)
        {
           Console.WriteLine("received " + command);
           System.Diagnostics.Process process = new System.Diagnostics.Process();
           System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
           startInfo.UseShellExecute = true;
           startInfo.CreateNoWindow = false;
           startInfo.RedirectStandardOutput = true;
           startInfo.UseShellExecute = false;
           startInfo.FileName = "Dism.exe";
           startInfo.Arguments = command;
        // startInfo.Arguments = command;
           process.StartInfo = startInfo;

           Task t = Task.Run(() => process.Start());
           t.Wait();
           string output = process.StandardOutput.ReadToEnd();
           Console.BackgroundColor = ConsoleColor.Black;
           if (output.Contains("0/1"))
           {
               Console.ForegroundColor = ConsoleColor.Yellow;
               installerOptimized.install.success = false;
           }
           else
           {
               Console.ForegroundColor = ConsoleColor.Green;
               installerOptimized.install.success = true;
           }
           Console.WriteLine(output);
           string success = installerOptimized.install.success ? "successful" : "unsuccessful";
           System.IO.File.WriteAllLines("Logs/" + logName + "_" + success + ".txt", output.Split('\n'));
           process.WaitForExit();
       }
   }

Назовите это так:

 myDism.Com("/Online /LogPath:log.log /LogLevel:4 /Enable-Feature /FeatureName:NetFx3 /All", "dism");

Спасибо.

person Holly Plyler    schedule 10.01.2019