2009-01-12 39 views
9

Tôi muốn chạy một ứng dụng bảng điều khiển sẽ xuất ra một tệp.Làm cách nào để ẩn giao diện người dùng ứng dụng bảng điều khiển khi sử dụng Process.Start?

tôi sử dụng đoạn mã sau:

Process barProcess = Process.Start("bar.exe", @"C:\foo.txt"); 

Khi điều này chạy cửa sổ giao diện điều khiển sẽ xuất hiện. Tôi muốn ẩn cửa sổ giao diện điều khiển để người dùng không nhìn thấy.

Điều này có khả thi không? Đang sử dụng Process.Start cách tốt nhất để bắt đầu một ứng dụng giao diện điều khiển khác?

Trả lời

14
 Process p = new Process(); 
     StreamReader sr; 
     StreamReader se; 
     StreamWriter sw; 

     ProcessStartInfo psi = new ProcessStartInfo(@"bar.exe"); 
     psi.UseShellExecute = false; 
     psi.RedirectStandardOutput = true; 
     psi.RedirectStandardError = true; 
     psi.RedirectStandardInput = true; 
     psi.CreateNoWindow = true; 
     p.StartInfo = psi; 
     p.Start(); 

này sẽ bắt đầu một quá trình con mà không hiển thị cửa sổ giao diện điều khiển, và sẽ cho phép chụp của StandardOutput vv

+0

Câu trả lời của bạn là cách thông tin hơn sau đó tôi +1 –

+0

tôi chỉ cần làm điều rất giống nhau không phải 2 giờ trước :) –

+0

Bạn quên làm bất cứ điều gì với StreamReaders và StreamWriter. –

-1

Chúng tôi đã thực hiện điều này trong quá khứ bằng cách thực hiện các quy trình của chúng tôi bằng cách sử dụng Dòng lệnh theo chương trình.

5

Kiểm tra trong ProcessStartInfo và đặt WindowStyle = ProcessWindowStyle.Hidden và CreateNoWindow = true.

+1

Đối với ứng dụng trên bàn điều khiển, tôi thấy rằng bạn chỉ cần ** WindowStyle = ProcessWindowStyle.Hidden **. Bạn không cần ** CreateNoWindow = true **. –

1

Nếu bạn muốn lấy đầu ra của quá trình này trong khi nó đang thực hiện, bạn có thể làm như sau (ví dụ sử dụng lệnh 'ping'):

var info = new ProcessStartInfo("ping", "stackoverflow.com") { 
    UseShellExecute = false, 
    RedirectStandardOutput = true, 
    CreateNoWindow = true 
}; 
var cmd = new Process() { StartInfo = info }; 
cmd.Start(); 
var so = cmd.StandardOutput; 
while(!so.EndOfStream) { 
    var c = ((char)so.Read()); // or so.ReadLine(), etc 
    Console.Write(c); // or whatever you want 
} 
... 
cmd.Dispose(); // Don't forget, or else wrap in a using statement 
Các vấn đề liên quan