Вызов сценария ruby ​​из c # - PullRequest
2 голосов
/ 09 марта 2011

Здесь ответили вызов сценария ruby ​​на c #

но это работает? Я пытался это сделать, но он продолжает сбой с ошибкой «Система не может найти указанный файл», я предполагаю, что это из-за команды ruby ​​перед именем файла, но я не совсем уверен.

Спасибо за помощь

Ответы [ 3 ]

4 голосов
/ 09 марта 2011

Вы также можете попробовать выполнить код Ruby с помощью IronRuby с чем-то вроде этого

using System;
using Microsoft.Scripting.Hosting;
using IronRuby;

class ExecuteRubyExample
{
    static void Main()
    {
        ScriptEngine engine = IronRuby.Ruby.CreateEngine();
        engine.ExecuteFile("C:/rubyscript.rb");
    }
}
1 голос
/ 09 марта 2011

Связанный ответ выглядит достаточно корректно, но он явно не работает для вас.Это означает, что это, вероятно, одна из двух вещей.

1) обратные слеши кусают вас.Попробуйте изменить

ProcessStartInfo info = new ProcessStartInfo("ruby C:\rubyscript.rb");

на

ProcessStartInfo info = new ProcessStartInfo(@"ruby C:\rubyscript.rb");

или

ProcessStartInfo info = new ProcessStartInfo("ruby C:\\rubyscript.rb");

Первое изменение использует строковые литералы, второе правильно экранирует обратную косую черту.

2) путь к среде не получает экспортированный в него каталог bin Ruby.Это менее вероятно и более трудно для проверки, поэтому я бы сосредоточился на первом.

0 голосов
/ 05 апреля 2019

Вот мой код для запуска сценария ruby.

using (var proc = new Process())
{
    var startInfo = new ProcessStartInfo(@"ruby");
    startInfo.Arguments = filePath;
    startInfo.UseShellExecute = false;
    startInfo.CreateNoWindow = true;
    proc.StartInfo = startInfo;
    proc.Start();
}

Этот метод запускает его asynchronously, так как запуск сценария может занять неизвестное количество времени, что позволяет main thread продолжать работу без блокировки, а затем ожидает завершения выполнения сценария, прежде чем вернуться Task.

private async Task RunRubyScript(string filePath)
{
  await Task.Run(() =>
  {
    using (var proc = new Process())
    {
      var startInfo = new ProcessStartInfo(@"ruby");
      startInfo.Arguments = filePath;
      startInfo.UseShellExecute = false;
      startInfo.CreateNoWindow = true;
      proc.StartInfo = startInfo;
      proc.Start();
      proc.WaitForExit();
    }
  });
}

Надеюсь, это поможет!

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