2011-03-09 63 views
2

有人在这里找到答案calling a ruby script in c#调用从C#

但确实是工作的Ruby脚本?我试过这个,但它一直没有通过“系统找不到指定的文件”错误,我假设它是因为ruby命令在文件名之前,但我不太确定。

感谢您的帮助

+1

执行Ruby代码,如果你已经安装了Ruby和代码文件的路径'红宝石C:\ ruby​​_script.rb'是正确的,它应该工作.. – rubyprince 2011-03-09 19:49:44

回答

1

链接的答案看起来相当正确,但它显然不是为你工作。这意味着它可能是两件事之一。

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)环境路径没有得到导出到它的Ruby的bin目录。这不太可能,也更难以测试,所以我会专注于第一个。

+0

好的答案;但在第二点,最近版本的Windows给你'where'命令,这使得路径问题很容易理清。只要运行'ruby',你就会得到一个匹配模式的路径列表。如果没有匹配,你会得到一个错误。 – Kevin 2011-03-09 20:40:04

+0

@Iceman - 感谢“where”命令的提示 - 我不知道。不幸的是,我在工作时被困在WinXP上,所以这对我来说并不好。 – 48klocs 2011-03-09 20:57:15

+0

感谢帮助球员,由于某种原因,它在这个例子中写的方式对我来说并不起作用,我终于得到它的方式是这样做的 'ProcessStartInfo ruby​​Proc = new ProcessStartInfo(@“ruby”); ruby​​Proc.Arguments = @“C:\ ruby​​test.rb”;' – exHash 2011-03-10 16:12:38

4

你也可以尝试与IronRuby像这样的东西

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

class ExecuteRubyExample 
{ 
    static void Main() 
    { 
     ScriptEngine engine = IronRuby.Ruby.CreateEngine(); 
     engine.ExecuteFile("C:/rubyscript.rb"); 
    } 
} 
+0

我确实检查了IR,但不幸的是我还在3.5上运行,并且不想从源代码编译IR代码,但它是一个很好的选择, 谢谢 – exHash 2011-03-10 16:18:02