2008-12-26 30 views
11

Những gì tôi cần làm là có một ứng dụng C# 2005 GUI gọi một tệp .bat và một số tệp VBScript theo yêu cầu của người dùng. Đây chỉ là một giải pháp khoảng trống cho đến cuối ngày nghỉ và tôi có thể viết tất cả trong C#. Tôi có thể nhận được các tập tin VBScript để thực thi không có vấn đề nhưng tôi không thể thực thi các tập tin .bat. Khi tôi "bấm" trong ứng dụng C# để thực thi .bat một cửa sổ DOS mở ra và đóng rất nhanh và thử nghiệm .bat tập tin không thực hiện - "Windows không nhận ra bat như một lệnh nội bộ hoặc bên ngoài" là lỗi trả về trong hộp DOS. Nếu tôi chỉ đơn giản là doubl-click vào tập tin .bat hoặc tự chạy nó từ dấu nhắc lệnh nó thực hiện. Tôi cũng cần tệp .bat để thực thi âm thầm trừ khi người dùng tương tác được yêu cầu - tập lệnh này sao chép 11k + tệp vào thư mục trên máy được nối mạng và thỉnh thoảng Windows "quên" nếu đích là tệp hoặc thư mục và yêu cầu người dùng nói nó là gì (đây là một vấn đề hoàn toàn khác không phải để thảo luận ở đây ... không cần phải nói rằng tôi cảm thấy khó chịu bởi nó).Làm cách nào để thực thi tệp .bat từ ứng dụng biểu mẫu C# windows?

Cho đến nay trong mã nguồn C# của tôi, tôi có điều này:

Process scriptProc = new Process(); 


     if (File.Exists("c:\\scripts\\batchfile1.bat")) 
     { 

      scriptProc.StartInfo.FileName = @"cscript"; 
      scriptProc.StartInfo.Arguments = ("cmd.exe", "/C C:\\scripts\\batchfile1.bat"); // Wacky psuedo code // 
      scriptProc.Start(); 
      scriptProc.WaitForExit(1500000); 
      scriptProc.Close(); 

     } 

     if (!File.Exists("c:\\scripts\\batchfile1.bat")) 
     { 
     } 

Tôi biết rằng mã này không hoạt động - nhưng về cơ bản là những gì tôi muốn nó làm. Những gì tôi đang xem là một cái gì đó như thế này cho các tập tin .bat. Tôi giả sử tôi phải nói với hệ thống để sử dụng cmd để chạy .bat. Tôi đang thua lỗ như thế nào để làm điều này. Tôi đã kiểm tra này site đó là dành cho C# 2003. Không giúp đỡ nhiều cho tôi như tôi rất xanh với C#.

EDIT: Sử dụng bài đăng của Kevin tôi đã thử lại lần nữa. Cùng một giải pháp kịch bản từ bài đó nhưng sửa đổi đối với tôi vì tôi không cần phải chuyển hướng:

System.Diagnostics.Process proc = new System.Diagnostics.Process(); 
      proc.StartInfo.FileName = "C:\\scripts\\batchfile1.bat"; 
      proc.StartInfo.RedirectStandardError = false; 
      proc.StartInfo.RedirectStandardOutput = false; 
      proc.StartInfo.UseShellExecute = false; 
      proc.Start(); 
      proc.WaitForExit(); 

Trả lời

11

Dưới đây là những gì bạn đang tìm kiếm:

Service hangs up at WaitForExit after calling batch file

Đó là về một câu hỏi là tại sao một dịch vụ không thể thực thi một tệp, nhưng nó hiển thị tất cả các mã cần thiết để làm như vậy.

+3

Điều này có vẻ giống như vậy. Tôi sẽ thử cái này. Thanh bên - Bạn có muốn các ngôn ngữ lập trình từ MS có tên dài hơn không? Googling "C#" ".bat" là vô ích trong cùng cực. – wergeld

0

Đối với vấn đề bạn đang gặp phải về tập tin thực thi yêu cầu người dùng nếu đích là một thư mục hoặc tập tin, nếu bạn biết câu trả lời trước, bạn có thể làm như vậy:

Nếu đích là một tập tin : echo f | [đường dẫn tệp hàng loạt]

Nếu thư mục: echo d | [đường dẫn tập tin theo lô]

Về bản chất, nó sẽ chỉ viết chữ cái sau "echo" vào đầu vào của tệp lô.

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