2011-07-19 25 views
5

Tôi gặp một số rắc rối khi chạy quy trình và chuyển arg cho họ. Tôi biết cách chạy quy trình với một số argsChuyển đối số cho quy trình đang chạy trong C#

ProcessStartInfo psi = new ProcessStartInfo("cmd.exe", "/c something"); 
Process p = Process.Start(psi) 

Vấn đề là sau khi quá trình thực thi được kết thúc. Đó là lý do tại sao có "/ c"

Nhưng tôi đang chạy nhiều tập lệnh và tôi muốn chạy chúng trong một quá trình ("cmd.exe") không bắt đầu quá trình mới mỗi lần.

Có một số giải pháp cho nó không?

Tôi hy vọng ai đó hiểu những gì tôi đang nói về;)

+2

Ý nghĩ đầu tiên mà bạn nghĩ đến là tạo một tệp lô, mặc dù có thể có thứ gì đó tốt hơn từ bên trong [tag: .net]. –

+0

Bạn có kiểm soát được logic ứng dụng cho chương trình mà bạn đang cố chuyển các đối số đến không? –

Trả lời

10

tôi khuyên bạn nên sử dụng một tập tin batch để kịch bản thực hiện các thực thi của bạn và gọi tập tin thực thi của bạn để thay thế. Hoặc, you can do this -

Process p = new Process(); 
    ProcessStartInfo info = new ProcessStartInfo(); 
    info.FileName = "cmd.exe"; 
    info.RedirectStandardInput = true; 
    info.UseShellExecute = false; 

    p.StartInfo = info; 
    p.Start(); 

    using (StreamWriter sw = new StreamWriter(p.StandardInput)) 
    { 
     if (sw.BaseStream.CanWrite) 
     { 
      sw.WriteLine("mysql -u root -p"); 
      sw.WriteLine("mypassword"); 
      sw.WriteLine("use mydb;"); 
     } 
    } 
+0

bạn không thực sự cần phải làm các tác giả viết nhạc. Bạn chỉ có thể gọi p.startinfo.filename = "cmd.exe"; p.startinfo.Arguments = "blah"; p.start(); p.waitforexit(); p.close(); – Grant

+0

Cảm ơn nó rất hữu ích nhưng tôi vẫn còn một số vấn đề. – kosa

+0

Tôi cố gắng tạo Process và khởi động nó trong constructor của lớp và sau đó gọi phương thức từ lớp này khi tôi chạy script. Nhưng khi tôi bắt đầu quá trình, nó đã thoát trong cùng một thời điểm – kosa

0

Nghe có vẻ như bạn nên để điều tra chuyển hướng đầu vào tiêu chuẩn - hãy chắc chắn cũng để thiết psi.UseShellExecute-false. Bạn cũng có thể muốn chuyển hướng đầu ra tiêu chuẩn, vì vậy bạn có thể có một số cách để biết quá trình con bạn đang làm gì.

Đọc thêm về chuyển hướng here.

+0

Quá muộn bằng một sợi tóc - 0A0D có nó. – Ben

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