2011-03-09 61 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