мое приложение находится в C # MVC с фреймворком 4.5.2 и хочет запустить внешний файл (.m) и получить вывод из него, и оно написано в октаве.
Примечание: результат вывода находится в строке, так что я должен показать этот вывод на C # HTML-странице.
Алгоритм написан в октаве, а также в файле алгоритма Excel для чтения данных, а внешние параметры также проходят через C #.
Я пробовал то, что уже опубликовано, основная проблема заключается в том,что мое приложение размещено в лазурном облаке.Поэтому я не могу установить октаву в облаке.Можете ли вы предложить мне любой другой способ, который напрямую запускает внешний файл (.m) с динамическим файлом Excel и параметрами.Я могу показать свой код, что я сделал.Он работает локально со всеми, но я не могу установить Octave в облаке Azure. Я установил свою установленную папку в корневой каталог на сервере, но он также не работает.
public Octave(string pathToOctaveBinaries, bool createWindow)
{
StartOctave(pathToOctaveBinaries, createWindow);
}
private void StartOctave(string pathToOctaveBinaries, bool createWindow)
{
_ptob = pathToOctaveBinaries;
cw = createWindow;
this.OctaveEchoString = Guid.NewGuid().ToString();
OctaveProcess = new Process();
ProcessStartInfo pi = new ProcessStartInfo();
if (pathToOctaveBinaries[pathToOctaveBinaries.Length - 1] != '\\')
pathToOctaveBinaries = pathToOctaveBinaries + "\\";
pi.FileName = pathToOctaveBinaries + "octave-cli.exe";
pi.RedirectStandardInput = true;
pi.RedirectStandardOutput = true;
pi.RedirectStandardError = true;
pi.UseShellExecute = false;
pi.CreateNoWindow = !createWindow;
pi.Verb = "open";
//
pi.WorkingDirectory = ".";
OctaveProcess.StartInfo = pi;
OctaveProcess.Start();
OctaveProcess.OutputDataReceived += new DataReceivedEventHandler(OctaveProcess_OutputDataReceived);
OctaveProcess.BeginOutputReadLine();
OctaveEntryText = ExecuteCommand(null);
}
public string ExecuteCommand(string command, int timeout)
{
if (OctaveProcess.HasExited)
{
StartOctave(_ptob, cw);
if (OctaveRestarted != null) OctaveRestarted(this, EventArgs.Empty);
}
_exitError = false;
Thread tmp = new Thread(new ParameterizedThreadStart(WorkThread));
tmp.Start(command);
if (!tmp.Join(timeout))
{
tmp.Abort();
throw new Exception("Octave timeout");
}
if (_exitError)
{
throw new Exception(_errorMessage);
}
return SharedBuilder.ToString();
}
Это выше файл класса Octave.Где я динамически передаю путь .exe для запуска в качестве потока.
Код контроллера:
Octave octave = new Octave(OctaveFilePath, false);
string fileData = result.Data.ToString();
fileData = fileData.Replace("#ExcelFilePath#", excelFilePath);
fileData = fileData.Replace("#ABCD#", historyData);
string rasp = octave.ExecuteCommand(fileData, 30000);
Отсюда я получаю строку и показываю ее на html-странице.