2

c# プログラムを使用して svn コマンドを実行する小さなユーティリティを作成しています

これが私のプログラムの重要な行です

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

私が想定しているように、上記のコードは svn チェックアウトを実行し、すべてのコードを上記のローカル パスにダウンロードできるはずです。しかし、何が起こっているかというと、コマンド プロンプトが c# プロジェクトの既定のパスで開き、何もしません。

この svn コマンドをコマンド ラインで実行すると、正常に動作します。しかし、C# を使用して実行すると、svn チェックアウト操作を実行せずにコマンド プロンプトがポップアップ表示されます。何がうまくいかないのですか?

4

3 に答える 3

8

CMD.exe を実行する必要はありません。CMD.exe は、他のアセンブリを呼び出す単なるプログラムです。引数 checkout を使用して svn.exe を直接呼び出すことができます ... (ただし、URL がありませんか?)

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();
}
于 2012-08-28T06:12:28.950 に答える
4

パラメータを追加する必要があります/c。試す:

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

このパラメーター/cは、cmd がコマンドを実行して終了する必要があることを意味します。

于 2012-08-28T06:10:59.330 に答える
1

Jon が指摘しているように、ここでは svnsharp が適しています。しかし、IMO問題は、実際に実行したいexeではなく、cmd.exeのシェルです。

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

ただし、ProcessStartInfo作業パスなどの設定が簡単になります。

于 2012-08-28T06:13:11.753 に答える