Системе не удается найти файл, указанный при запуске команды через модуль Process в C# - PullRequest
0 голосов
/ 12 февраля 2020

Я пытаюсь выполнить одну команду через процесс, но возникает исключение: «Системе не удается найти указанный файл». Когда я запускаю эту команду прямо в командной строке. Работает нормально.

Команда: start cmd.exe @cmd / k "NTttcpr.exe -r -m 1, *, 192.168.1.2 -a 2 -t 120 -wu 10 -cd 10 >> NTTTCP-1T-TCP-IPV4-Rx-MTU1500-Support-port-1-Rx-AMD-10-GBE-RJ45-ITR-1.log "

Эта команда выполняется отлично, если я запускаюсь из командной строки ,

Вот как я написал код:

string tool = @"NTttcpr.exe";
string command = " -r -m 1,*,192.168.1.2 -a 2 -t 120 -wu 10 -cd 10 >> NTTTCP-1T-TCP-IPV4-Rx-MTU1500-Support-port-1-Rx-AMD-10-GBE-RJ45-ITR-1.log";

private void RunCommand(string tool, string command)
    {
        try
        {
            logger.Info($"{MethodBase.GetCurrentMethod()}: {tool} {command}");
            Process pro = new Process();
            pro.StartInfo.FileName = "start cmd ";
            pro.StartInfo.Arguments = "@cmd /k " + '"' + tool  + " " + command + '"';

            pro.StartInfo.UseShellExecute = false;
            pro.StartInfo.RedirectStandardOutput = true;

            logger.Info($"{MethodBase.GetCurrentMethod()}: Executing command: {tool} {command}");
            pro.StartInfo.Verb = "runas";
            pro.Start();
            //pro.WaitForExit(MillisecondsTimeout);
            //Thread.Sleep(MillisecondsTimeout);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
            logger.Error($"{MethodBase.GetCurrentMethod()}: Exception occurred while uni-directional command!!");
            logger.Error($"{MethodBase.GetCurrentMethod()}: {ex}");
        }
    }

Примечание: файл NTttcpr.exe уже присутствует в текущем каталоге выполнения.

Пожалуйста, помогите мне решить эту проблему.

Ответы [ 2 ]

1 голос
/ 12 февраля 2020

Это должно быть потому, что вы не установили рабочий каталог, добавьте pro.StartInfo.WorkingDirectory = "path to NTttcpr.exe", не добавляйте NTttcpr.exe, просто добавьте местоположение.

Дайте мне знать, если это работает.

0 голосов
/ 12 февраля 2020

cmd.exe не требуется для класса Process. Попробуйте как ниже.

pro.StartInfo.FileName = "NTttcpr.exe";
pro.StartInfo.Arguments = command 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...