kalaivanan from Bangalore, India Ответов: 3

Как запустить команду командной строки и получить вывод на c# в windows 7


Я использовал приведенный ниже код для запуска командной строки и списка файлов каталогов .Его запущенная командная строка, но команда "dir" не выполняется.Пожалуйста, скажите мне, в чем проблема.

Система.Диагностика.Процесс процесс = новая система.Диагностика.Процесс();
Система.Диагностика.ProcessStartInfo startInfo = новая система.Диагностика.Изменение панели();
информацию.Значение свойства useshellexecute = false в;
startInfo.RedirectStandardOutput = true;
свойство StartInfo.Имя Файла = "CMD.exe";
свойство StartInfo.Аргументы = "реж.";
процесс.Информацию = информацию;
процесс.Начать();
вывод строки = процесс.StandardOutput.ReadToEnd();
Ящик для сообщений.Показать(вывод);
процесс.WaitForExit();

3 Ответов

Рейтинг:
23

OriginalGriff

Просто: измените свои аргументы на:

startInfo.Arguments = "/c dir";

Здесь есть более полное объяснение: Как выполнить команду в C# ?[^]


Рейтинг:
1

CoderPanda

У меня нет полного ответа. Если я его получу, то обязательно доложу.

Но то, что я быстро выяснил, попробовав ваш код в консольном приложении, заключается в том, что при вызове cmd.exe таким образом, cmd открывается внутри cmd, который Visual studio запускает во время отладки приложения. Мне пришлось дважды набрать exit, чтобы выйти из приложения в режиме F5. Надеюсь, в этом был какой-то смысл.

Итак, это означает, что аргумент "dir" не является правильным способом отправки команды.


Рейтинг:
0

Vedat Ozan Oner

другое решение:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Test_CmdExec
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                using (Process p = new Process())
                {
                    // set start info
                    p.StartInfo = new ProcessStartInfo("cmd.exe")
                    {
                        RedirectStandardInput = true,
                        UseShellExecute = false,
                        WorkingDirectory = @"d:\"
                    };
                    // event handlers for output & error
                    p.OutputDataReceived += p_OutputDataReceived;
                    p.ErrorDataReceived += p_ErrorDataReceived;

                    // start process
                    p.Start();
                    // send command to its input
                    p.StandardInput.Write("dir" + p.StandardInput.NewLine);
                    //wait
                    p.WaitForExit();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
        }

        static void p_ErrorDataReceived(object sender, DataReceivedEventArgs e)
        {
            Process p = sender as Process;
            if (p == null)
                return;
            Console.WriteLine(e.Data);
        }

        static void p_OutputDataReceived(object sender, DataReceivedEventArgs e)
        {
            Process p = sender as Process;
            if (p == null)
                return;
            Console.WriteLine(e.Data);
        }
    }
}