2015-09-22 206 views
0

我想在我的程序的後臺運行在cmd這些命令的後臺運行在cmd命令:在Windows窗體應用程序

  • 更改到該目錄,並輸入「svn日誌--xml -v> svn.log
  • 更改回C:\ statsvn目錄
  • 類型 'Java的罐子statsvn.jar C:\ MyProject的\ svn.log C:\ myproject的'

我不確定我應該從哪裏開始,但已經嘗試過:

private void FileSelect_Click(object sender, EventArgs e) 
    { 
     string databaseDirectory = saveAndLoad.getFolderContentsFilename(); 
     FilePath.Text = databaseDirectory; 
    } 

    private void xmlGenerator_Click(object sender, EventArgs e) 
    { 
     string file = FilePath.ToString(); 
     var process = new Process(); 
     var startInfo = new ProcessStartInfo 
     { 
      WindowStyle = ProcessWindowStyle.Hidden, 
      FileName = "path to your script file..." 
     }; 

     process.StartInfo = startInfo; 

     process.Start(); 
     process.WaitForExit(); 

     if (process.ExitCode == 0) 
     { 
      //success 
     } 
     else 
     { 
      //an error occured during script execution... 
     } 

    } 

我的代碼的總體目標是根據已經提交給SVN的更改生成一個xml文件,需要運行的命令行應創建一個xml文件。我想在程序的後臺執行此操作,而不顯示cmd。

任何幫助將是偉大的。

感謝

回答

0

您試圖在startInfo.FileName路徑運行位於文件中的程序,而不是你的腳本。保存腳本,要執行一個文件,該路徑的腳本文件傳遞給你的StartInfo對象,啓動進程並等待其執行:

var process = new Process(); 
var startInfo = new ProcessStartInfo 
{ 
    WindowStyle = ProcessWindowStyle.Hidden, 
    FileName = "path to your script file..." 
}; 

process.StartInfo = startInfo; 

process.Start(); 
process.WaitForExit(); 

if (process.ExitCode == 0) 
{ 
    //success 
} 
else 
{ 
    //an error occured during script execution... 
} 
+0

對不起不理解「保存腳本,要執行一個文件的位,將腳本文件的路徑傳遞給StartInfo對象,啓動進程並等待其執行「 –

+0

只需在解決方案的某處創建一個名爲(例如''script.cmd')的簡單文本文件,並將您的命令(即。 'svn log --xml -v> svn.log')到該文件中。文件存儲在你的解決方案的某個地方,因此你知道文件的相對路徑 - 將相對路徑傳遞給你的'StartInfo'對象。您可以按照上面的代碼片段所示運行該腳本。 –

+0

當我運行它時,我收到一個錯誤「Win32異常未處理」系統找不到指定的文件。有什麼建議麼? –

0

我用下面的功能對於任何命令,它總是有效的:在這裏你需要傳遞兩個參數。 1)你的命令和2)你的目錄。

private string BatchCommand(string cmd, string mapD) 
    { 
     Batchresults = ""; 

     System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo("cmd", "/c " + cmd); 
     procStartInfo.WorkingDirectory = mapD; 
     // The following commands are needed to redirect the standard output. 
     // This means that it will be redirected to the Process.StandardOutput StreamReader. 
     procStartInfo.RedirectStandardOutput = true; 
     procStartInfo.RedirectStandardError = true; 
     procStartInfo.RedirectStandardInput = true; 
     procStartInfo.UseShellExecute = false; 
     // Do not create the black window. 
     procStartInfo.CreateNoWindow = true; 
     // Now we create a process, assign its ProcessStartInfo and start it 
     System.Diagnostics.Process cmdProcess = new System.Diagnostics.Process(); 
     cmdProcess.StartInfo = procStartInfo; 
     cmdProcess.ErrorDataReceived += cmd_Error; 
     cmdProcess.OutputDataReceived += cmd_DataReceived; 
     cmdProcess.EnableRaisingEvents = true; 
     cmdProcess.Start(); 
     cmdProcess.BeginOutputReadLine(); 
     cmdProcess.BeginErrorReadLine(); 
     cmdProcess.StandardInput.WriteLine("exit");     //Execute exit. 
     cmdProcess.WaitForExit(); 

     // Get the output into a string 

     return Batchresults; 
    } 
    static void cmd_DataReceived(object sender, DataReceivedEventArgs e) 
    { 
     if (e.Data != null) 
      Batchresults += Environment.NewLine + e.Data.ToString(); 

    } 

    void cmd_Error(object sender, DataReceivedEventArgs e) 
    { 
     if (e.Data != null) 
     { 
      Batchresults += Environment.NewLine + e.Data.ToString(); 

     } 
    } 

請注意,Batchresults是一個全局字符串。

調用腳本

string result= BatchCommand("Your command here","Directory from where you want to execute it"); 

串結果將包含所有結果的細節和錯誤,以及

+0

我得到的錯誤周圍的批量結果必須定義? –

+0

你需要在你的類中定義它..外部函數 定義它你已經定義了TextSaveAndLoad saveAndLoad = new TextSaveAndLoad(); –

+0

我已經定義了它,但是在cmd_DataReceived中給出了一個錯誤「對於非靜態字段,方法或屬性'XML_generator.Form1.Batchresults' –