Как запустить CMD и подключить команду из программы bot azure, если намерение распознано?

#c# #botframework #azure-language-understanding #luis.ai

Вопрос:

Ниже приведен пример намерения бота Azure SDK, который запускается в эмуляторе платформы bot. Бот распознает мои намерения, возвращая ответ строкового типа. Это была просто подготовка к боту, когда он распознает мое намерение, он должен запустить программу CMD и выполнить команду в системе, а после выполнения команды в CMD и завершения этого он вернет ответ о том, что команда была выполнена…. Однако, как вы можете видеть ниже, к сожалению, это не работает. Вместо этого бот немедленно возвращает все ответы, не дожидаясь и не выполняя команду в CMD.

 case WebAppBotTester.Intent.TestPageOne:
   var getSearchActionText = "Redirecting to the Action and run CMD, wait...";
   var getSearchActionMessage = MessageFactory.Text(getSearchActionText, getSearchActionText, InputHints.IgnoringInput);
   await stepContext.Context.SendActivityAsync(getSearchActionMessage, cancellationToken);
   string command = @"cd ..\..amp; cd tests amp; npx [MAKE ACTION..]";
   ProcessStartInfo cmdsi = new ProcessStartInfo("cmd.exe");
   cmdsi.Arguments = command;
   Process cmd = Process.Start(cmdsi);
   cmd.WaitForExit();
   var getresultActionText = "The result is ready!";
   var getresultActionMessage = MessageFactory.Text(getresultActionText , getresultActionText, InputHints.IgnoringInput);
   await stepContext.Context.SendActivityAsync(getresultActionMessage, cancellationToken);
break;
 

Что я делаю не так?

Комментарии:

1. есть новости ??????

Ответ №1:

Это решило мою проблему:

Я написал простой класс NodeJsServer на C#, который может помочь вам в этих вещах. Он доступен на GitHub здесь. Он имеет множество опций, вы можете выполнять команды «установка npm» в определенных каталогах или запускать NodeJS, проверять текущее состояние (выполняется ли он, компилируется ли, запускается ли, устанавливается ли) и, наконец, останавливать NodeJS. Проверьте быстрый пример использования.

Это необработанный код (скопированный в основном из класса NodeJsServer) того, что вы пытаетесь сделать:

 // create the command-line process
var cmdProcess = new Process
{
    StartInfo =
    {
        FileName = "cmd.exe",
        UseShellExecute = false,
        CreateNoWindow = true, // this is probably optional
        ErrorDialog = false, // this is probably optional
        RedirectStandardOutput = true,
        RedirectStandardInput = true
    }
};

// register for the output (for reading the output)
cmdProcess.OutputDataReceived  = (object sender, DataReceivedEventArgs e) =>
{
    string output = e.Data;
    // inspect the output text here ...
};

// start the cmd process
cmdProcess.Start();
cmdProcess.BeginOutputReadLine();

// execute your command
cmdProcess.StandardInput.WriteLine("quicktype --version");