2010-04-07 2 views
12

Tôi muốn chạy một ứng dụng giao diện điều khiển (ví dụ: app.exe) từ một sự kiện tải biểu mẫu cửa sổ. I'v đã thử System.Diagnostics.Process.Start(), Nhưng sau khi nó mở app.exe, nó đóng nó một cách vô cùng.làm thế nào để thực hiện ứng dụng giao diện điều khiển từ cửa sổ hình thức?

Có cách nào để tôi có thể chạy app.exe và để nó mở không?

+1

Bạn muốn ** all.exe ** để luôn mở? Nó có chờ đầu vào của người dùng không? Nếu nó kết thúc, đó là vì ứng dụng.exe đã làm những gì nó cần và đang đóng cửa. –

+0

Vì mục đích gỡ lỗi, hãy thử đặt lệnh ngủ trong app.exe trong khoảng 10 giây. Ứng dụng có mở trong 10 giây hay không vẫn đóng ngay lập tức? Nếu có nhật ký sự cố, có điều gì được báo cáo trong đó không? – FrustratedWithFormsDesigner

+0

Ứng dụng có hoạt động khác khi bạn chạy app.exe từ dòng lệnh không? Bạn có cần phải vượt qua trong args? –

Trả lời

9

Nếu bạn chỉ muốn cửa sổ bảng điều khiển ở trạng thái mở, bạn có thể chạy nó bằng lệnh này:

System.Diagnostics.Process.Start(@"cmd.exe", @"/k c:\path\my.exe"); 
+0

Hoạt động, nhưng đường dẫn của tôi là từ một textBox, vì vậy nếu tôi có không gian trong đường dẫn của tôi, nó sẽ không hoạt động –

+1

@Or Betzalel: Tôi chưa thử nó trong tình huống cụ thể này, nhưng tôi nghĩ bạn có thể kèm theo đường dẫn trong dấu nháy kép. Hoặc sử dụng một đối tượng ProcessStartInfo làm tham số cho Process.Start. –

1

Nếu bạn có thể thay đổi mã của app.exe, chỉ cần thêm Console.In.Read() để làm cho nó chờ đợi một lần nhấn phím.

2

Nếu app.exe không làm gì hoặc hoàn thành công việc nhanh chóng (tức là chỉ in "Hello World" và trả về), nó sẽ hoạt động theo cách bạn vừa giải thích. Nếu bạn muốn app.exe ở lại mở sau khi công việc của nó được thực hiện, đặt một số loại tin nhắn hoàn thành theo sau bởi Console.ReadKey(); trong ứng dụng giao diện điều khiển.

1

app.exe có thể kết thúc bằng Console.ReadLine() giả sử nó cũng là một ứng dụng C# nơi bạn kiểm soát mã nguồn.

1

Bạn có một trong hai vấn đề, đưa ra ứng dụng master/slave của bạn thiết lập:

  1. ứng dụng chính của bạn bị mở, hiển thị một hình thức, hình thức mà chạy ứng dụng nô lệ và đóng cửa ngay lập tức, mặc dù các ứng dụng nô lệ vẫn đang chạy.
  2. Ứng dụng chính của bạn đang mở, hiển thị biểu mẫu, biểu mẫu đó chạy ứng dụng nô lệ đóng ngay lập tức.

Đối với vấn đề đầu tiên, bạn cần phải chờ đợi/block cho quá trình này để hoàn thành (tức là Process.WaitForExit().

Đối với vấn đề thứ hai, có vẻ như ứng dụng nô lệ đã làm những gì nó cần phải (hoặc ném một trường hợp ngoại lệ) và đóng ngay lập tức Hãy thử chạy nó với các tham số tương tự từ dấu kiểm nhắc lệnh và kiểm tra đầu ra

3

Hãy thử làm điều này:

 string cmdexePath = @"C:\Windows\System32\cmd.exe"; 
     //notice the quotes around the below string... 
     string myApplication = "\"C:\\Windows\\System32\\ftp.exe\""; 
     //the /K keeps the CMD window open - even if your windows app closes 
     string cmdArguments = String.Format("/K {0}", myApplication); 
     ProcessStartInfo psi = new ProcessStartInfo(cmdexePath, cmdArguments); 
     Process p = new Process(); 
     p.StartInfo = psi; 
     p.Start(); 

Tôi nghĩ rằng điều này sẽ giúp bạn có được hành vi mà bạn đang cố gắng để. Giả sử bạn không chỉ cố gắng xem đầu ra trong cửa sổ lệnh. Nếu bạn chỉ muốn xem kết quả, bạn đã có một số phiên bản của câu trả lời đó. Đây chỉ là cách bạn có thể chạy ứng dụng của mình và giữ bảng điều khiển mở.

Hy vọng điều này sẽ hữu ích. Chúc may mắn.

1

Nếu bạn có quyền kiểm soát đối với app.exe, bạn nên biết cách hoạt động của hàm để tôi cho rằng bạn không có quyền kiểm soát hoạt động bên trong của nó. Trong trường hợp đó, bạn có thể thử chuyển cờ trợ giúp có thể hoặc không thể cung cấp cho bạn thêm thông tin về cách gọi app.exe. Hãy thử một cái gì đó như thế này:

private startApp() 
{ 
    string command = " -h"; //common help flag for console apps 
    System.Diagnostics.Process pRun; 
    pRun = new System.Diagnostics.Process(); 
    pRun.EnableRaisingEvents = true; 
    pRun.Exited += new EventHandler(pRun_Exited); 
    pRun.StartInfo.FileName = "app.exe"; 
    pRun.StartInfo.Arguments = command; 
    pRun.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal 

    pRun.Start(); 
    pRun.WaitForExit(); 
} 
private void pRun_Exited(object sender, EventArgs e) 
{ 
    //Do Something Here 
} 
0

Tạo một tập tin văn bản mới, đặt tên cho nó app.bat và đặt điều này trong đó:

app.exe 
pause 

Bây giờ có điểm hình thức của bạn với file bat.