2009-10-11 94 views
0

我想讓我的ASP.NET頁面掏出並執行git命令。我把命令的bat文件,其工作原理:如何從ASP.NET頁面中取出shell並執行git命令?

REM cd to the git repo folder 
cd c:\temp\mygitrepo 
"c:\Program Files\Git\Bin\git.exe" show c090dc4b8b1b3512c1b5363c371e21d810d02f54 -- myfile.txt 

如果我從一個命令提示符運行我.bat文件,沒問題。 如果我使用System.Diagnostics.Process.Start運行它,我得到這個錯誤:
RUNTIME_PREFIX請求,但前綴計算失敗。使用靜態後備

錯誤是從這個混帳文件來:http://github.com/git/git/blob/master/exec_cmd.c

我使用完全相同的技術運行svn.exe命令,沒有問題。

編輯1:從thread here我瞭解到,msysgit將某些文件安裝在與當前用戶相關聯的位置,而不是所有用戶。 IIS Web服務器正在另一個用戶帳戶下運行。我嘗試將一些引起我注意的git文件(如.gitconfig)複製到其他用戶(在Documents and Settings中)。沒有運氣。所以,我已經將我的注意力轉向讓IIS在啓動git命令時模擬我。

回答

3

它實際上是一個錯誤,還是隻是通知你一個後備?根據鏈接的代碼,看起來該命令仍然應該成功執行,只使用靜態PREFIX而不是RUNTIME_PREFIX。

如果該命令確實失敗,則可能需要確保在從.NET啓動進程時可以使用任何必需的環境變量。您可能還需要模擬不同的Windows身份以使用適當的權限運行該命令(我假設ASP.NET身份儘可能受到限制。)ProcessStartInfo對象提供了幾種配置進程的方式,包括窗口身份,過程動詞和環境變量。確保在運行批處理文件之前提供正確的上下文。

+0

精神上,我很快就駁回了你的「這是否是一個錯誤......命令仍然應該成功執行」。但這是關鍵。 我的邏輯捕獲stdout和stderr。如果stderr不是空白的,我的邏輯假定命令失敗並且只顯示stderr。正如你懷疑的那樣,stdout確實包含了我期望的輸出,儘管有錯誤。 – 2009-10-12 01:45:51

+0

有時候,它只是需要一些開箱即用的想法。 ;)很高興工作。 – jrista 2009-10-12 05:03:35