2012-09-28 37 views
6

Tôi đang cố gắng gọi một kịch bản kiến ​​từ một ứng dụng C#. Tôi muốn cửa sổ giao diện điều khiển bật lên và ở lại (tôi chỉ cần gọi dấu nhắc lệnh ngay bây giờ, nhưng cuối cùng tôi muốn gọi một kịch bản kiến, có thể mất đến một giờ). Đây là mã mà tôi đang sử dụng, mà tôi thay đổi từ original:Gọi Command Prompt và Leave Window Mở

public void ExecuteCommandSync(object command) 
{ 
    try 
    { 
     // create the ProcessStartInfo using "cmd" as the program to be run, 
     // and "/c " as the parameters. 
     // Incidentally, /c tells cmd that we want it to execute the command that follows, 
     // and then exit. 
     System.Diagnostics.ProcessStartInfo procStartInfo = 
     new System.Diagnostics.ProcessStartInfo("cmd", "/k " + command); 

     // 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.UseShellExecute = false; 
     // Do not create the black window. 
     procStartInfo.CreateNoWindow = false; 
     // Now we create a process, assign its ProcessStartInfo and start it 
     System.Diagnostics.Process proc = new System.Diagnostics.Process(); 
     proc.StartInfo = procStartInfo; 

     proc.Start(); 
     proc.WaitForExit(); 

    } 
    catch (Exception objException) 
    { 
     Console.WriteLine(objException); 
    } 
} 

Tôi cũng muốn vượt qua trong lên đến 5 thông số, nhưng ngay bây giờ tôi chỉ quan tâm đến việc giữ cửa sổ mở đủ lâu để xem điều gì đang xảy ra và tôi không muốn đọc bất kỳ nội dung nào do tập lệnh kiến ​​tạo ra. Tôi không muốn yêu cầu bất cứ ai làm công việc của tôi cho tôi, nhưng tôi đã đập đầu của tôi trên này một thời gian, vì vậy bất kỳ trợ giúp sẽ được đánh giá rất nhiều!

Trả lời

7

Đường này;

procStartInfo.RedirectStandardOutput = true; 

Điều gì làm cửa sổ đóng lại. Loại bỏ dòng này, hoặc thêm một trình xử lý vào Process.StandardOutput để đọc nội dung ở một nơi khác;

string t = proc.StandardOutput.ReadToEnd(); 
+0

Đã hoạt động! Đã thất vọng với điều đó cho hầu hết ngày hôm nay. Bất kỳ ý tưởng làm thế nào để làm cho nó hoạt động với nhiều lệnh? Đặc biệt là những người có không gian màu trắng như: cd c: \\ users \\ – Stubbs

+2

Lệnh với dấu cách nên được diễn giải chính xác như-is.For nhiều lệnh; Bạn có thể cần phải gửi các lệnh đến một tập tin thực thi, hoặc xem xét việc gửi các lệnh tới StandardInputStream, tôi không nghĩ rằng bạn có thể gửi tất cả trong một chuỗi. –

+0

Bạn cũng có thể gửi nhiều tham số như sau: [link] (http://stackoverflow.com/questions/5591382/how-to-execute-multiple-cammand-in-command-prompt-using-c-sharp). Điều này thay đổi thư mục và chuyển 4 tham số cho một tập tin thực thi. Có thể hữu ích cho ai đó. – Stubbs

Các vấn đề liên quan