2009-12-04 102 views
3

我是開發人員在horn OSS項目,旨在緩解構建其他OSS項目的痛苦。我們正試圖讓喇叭像經驗一樣成爲紅寶石寶石。喇叭的許多挑戰之一是必須處理所有各種構建引擎,如Nant,powershell,msbuild和rake,這是本文的重點。從.NET窗口服務運行Rake

Horn有2個表現形式,它作爲一個cmd行工具運行,它也作爲一個windows服務運行,它可以建立所有可以從this網站下載的各種包。

某些OSS項目使用rake構建它們的源代碼,這最終使我接觸到了這篇文章。

我無法從Windows服務中運行rake進程,而當從命令行運行時,完全相同的代碼可以毫無問題地啓動rake進程。 rake從cmd行工具運行的原因可能是因爲它與窗口有關,儘管我不能正確地說。沒有例外被拋出,但這個過程並沒有啓動。

有趣的是,其他所有的.exe工作正常,它只是耙子導致的問題。

下面是代碼,開始創建過程:

public IProcess GetProcess(string pathToBuildTool, string cmdLineArguments, string workingDirectoryPath) 
{ 
    var psi = new ProcessStartInfo(pathToBuildTool, cmdLineArguments) 
        { 
         UseShellExecute = false, 
         RedirectStandardOutput = true, 
         WorkingDirectory = workingDirectoryPath, 
         Arguments = cmdLineArguments 
        }; 

    return new DiagnosticsProcess(Process.Start(psi)); 
} 

有沒有人有任何建議,問題是什麼?

回答

2

我編譯和調查了一下我自己。

在我的機器上,Horn服務實際上啓動了一個Ruby進程來運行Rake,但該進程立即退出並出現錯誤。我使用Process Monitor來監視進程創建,同時過濾包含「ruby」的路徑。最終的結果是Horn無法使用Rakefile進行構建。

經過一些更多的調查後,我對Horn如何創建構建過程進行了一些調整。當我不僅重定向StandardOutput而且還有StandardError時,我發現構建實際上在我的機器上運行。

public IProcess GetProcess(string pathToBuildTool, string cmdLineArguments, string workingDirectoryPath) 
{ 
    var psi = new ProcessStartInfo(pathToBuildTool, cmdLineArguments) 
        { 
         UseShellExecute = false, 
         RedirectStandardOutput = true, 
         RedirectStandardError = true, 
         WorkingDirectory = workingDirectoryPath, 
         Arguments = cmdLineArguments 
        }; 

    return new DiagnosticsProcess(Process.Start(psi)); 
} 

我也改變DiagnosticProcess以輸出兩個消息從StandardOutputStandardError

public string GetLineOrOutput() 
{ 
    return process.StandardOutput.ReadLine() ?? process.StandardError.ReadLine(); 
} 

淨結果是下面的行是在喇叭服務日誌的最後一條消息:

HORN HAS FINISHED INSTALLING mspec. 
0

顯然,應該通過提供的批處理文件(通常爲c:\ruby\bin\rake.bat)調用Windows上的Rake,而不是直接運行.EXE。詳細信息請參見Instant Badger: Rake gotcha on Windows

如果切換到使用提供的批處理文件不能解決問題,請讓我知道&我會告訴我們喇叭來源並仔細觀察。

+0

沒有雪茄哥們,但謝謝你的回答。 如果您正在查看源代碼,它位於horn.services.sln中,install_package_service.bat將安裝它。我將調試器設置爲在啓動時在適當的位置開啓。 – dagda1 2009-12-04 23:59:19