2012-08-28 50 views
2

我寫一個小工具使用C#程序SVN檢出使用C#程序

下面是執行命令的svn我的程序

System.Diagnostics.Process.Start(「Cmd.exe中的重點線「,@」svn checkout C:\ TestBuildDevelopment \ Code「);

正如我所假設的,上面的代碼應該能夠執行svn check out並將所有代碼下載到上面提到的本地路徑。但是發生的事情是,命令提示符會以c#項目的默認路徑打開,並且什麼也不做。

如果我在命令行中運行這個svn命令,它工作正常。但是當我使用C#運行時,它只是彈出命令提示符而不執行svn checkout操作。有什麼想法出錯?

+4

你有沒有考慮使用[' svnsharp'](http://code.google.com/p/svnsharp/)呢? –

+0

@JonSkeet svnsharp很棒!我下載了這個dll,現在好了。非常感謝。我應該將此標記爲最佳答案。儘管下面有一些可接受的答案,但這是最好的答案。但我怎麼能把這個標記爲接受。 – SARAVAN

+0

這是非常古老的...現在,也有SharpSVN: https://sharpsvn.open.collab.net – johnjps111

回答

3

您需要添加參數/c。嘗試:

Process.Start("CMD.exe", @"/c svn checkout C:\TestBuildDevelopment\Code"); 

參數/c意味着cmd中應該執行命令,然後退出。

6

您不必運行CMD.exe。 CMD.exe只是一個調用其他程序集的程序。 可以直接調用svn.exe與你的說法結賬......(但是,這不是有一個網址失蹤?)

Process.Start("svn.exe", @"checkout C:\TestBuildDevelopment\Code"); 

,你也可以試試這個:

Process proc = new Process(); 
ProcessStartInfo startInfo = new ProcessStartInfo(); 
startInfo.RedirectStandardOutput = true; 
startInfo.WindowStyle = ProcessWindowStyle.Hidden; 
startInfo.FileName = "svn.exe"; 
startInfo.CreateNoWindow = true; 
startInfo.Arguments = "checkout ..."; 

proc.StartInfo = startInfo; 
if(proc.Start()) { 
    proc.WaitForExit(); 
} 
+0

你說得對,cmd根本不需要。好點子! – rekire

1

由於喬恩指出,svnsharp會在這裏是一個不錯的選擇;但IMO問題炮轟CMD.EXE,而不是EXE你真的想運行:

Process.Start(@"path\to\svn.exe", @"checkout ""C:\TestBuildDevelopment\Code"""); 

雖然ProcessStartInfo將使它更容易設置工作路徑等

+0

是的。我寧願svnsharp – SARAVAN