WCF: как запустить простую команду cmd на удаленной машине - PullRequest
1 голос
/ 07 апреля 2019

Итак, у меня есть WCF сервер, работающий на удаленной машине. Этот сервер получил простую строку в качестве аргумента, и я хочу, чтобы этот аргумент выполнялся через command line.

Это функция на стороне сервера, которая должна выполнить command:

public void ExecuteCmdCommand(string arguments)
    {
        log.Info(arguments);
        Process process = new Process();
        ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.WindowStyle = ProcessWindowStyle.Maximized;
        startInfo.RedirectStandardOutput = true;
        startInfo.UseShellExecute = false;
        startInfo.FileName = "cmd.exe";
        startInfo.Arguments = arguments;
        log.Debug(startInfo.Arguments);
        process.StartInfo = startInfo;
        process.OutputDataReceived += (sender, args) =>
        {                
            log.Info(args.Data);
        };

        process.Start();
        process.BeginOutputReadLine();
        process.WaitForExit();
    }

Как вы можете видеть в начале этого function, я печатаю к моему console полученному command.

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

Что я делаю не так? та же команда на моей локальной машине запускает notepad.

Обновление

OK notepad работает нормально (также без .exe в конце), но когда я посылаю команду appium (я хочу запустить мой appium сервер), я получаю этот er r или при отправке от command до server (но server получила команду 'appium'):

System.ServiceModel.FaultException: «Серверу не удалось обработать запрос из-за внутренней ошибки. Для получения дополнительной информации о ошибка, либо включите IncludeExceptionDetailInFaults (либо из ServiceBehaviorAttribute или из конфигурации поведение) на сервере для отправки информации об исключении вернуться к клиенту или включить трассировку в соответствии с Microsoft .NET Framework SDK: документация и проверка журналов трассировки сервера. '

1 Ответ

1 голос
/ 07 апреля 2019

Неправильное имя файла процесса, «cmd.exe». Вы можете попробовать это:

ProcessStartInfo startInfo = new ProcessStartInfo(arguments);
startInfo.WindowStyle = ProcessWindowStyle.Maximized;
startInfo.RedirectStandardOutput = true;
startInfo.UseShellExecute = false;

и в аргументах передать следующее:

notepad.exe

Для подробного обзора класса ProcessStartInfo, пожалуйста, посмотрите здесь .

Я предлагаю вам подумать о случае, когда вы хотите передать аргументы, а также некоторые аргументы, связанные с процессом, который вы хотите запустить. Например, вы можете запустить блокнот и открыть файл. Файл должен быть передан также в качестве аргумента. Поэтому я думаю, что более подходящим подходом было бы сделать arguments массивом строк и следовать соглашению о том, что первый элемент массива - это программа, которую вы хотите запустить, а остальные элементы массива - это аргументы программы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...