2012-01-10 95 views
13

Tôi có một chương trình VB.net mà tôi gọi là hàm Shell. Tôi muốn có được đầu ra văn bản được tạo ra từ mã này trong một tập tin. Tuy nhiên, đây không phải là giá trị trả về của mã thực thi vì vậy tôi không thực sự biết làm thế nào để.Lấy đầu ra của lệnh Shell trong VB.net

Chương trình này là dịch vụ nhưng có quyền truy cập vào đĩa không có vấn đề vì tôi đã đăng nhập thông tin khác. Toàn bộ dịch vụ có nhiều luồng nên tôi cũng phải đảm bảo rằng khi tệp được ghi, nó chưa được truy cập.

Trả lời

24

Bạn sẽ không thể thu được kết quả từ Shell.

Bạn cần thay đổi điều này thành quy trình và bạn sẽ cần nắm bắt các luồng Standard Output (và có thể Lỗi) từ quy trình.

Dưới đây là một ví dụ:

 Dim oProcess As New Process() 
     Dim oStartInfo As New ProcessStartInfo("ApplicationName.exe", "arguments") 
     oStartInfo.UseShellExecute = False 
     oStartInfo.RedirectStandardOutput = True 
     oProcess.StartInfo = oStartInfo 
     oProcess.Start() 

     Dim sOutput As String 
     Using oStreamReader As System.IO.StreamReader = oProcess.StandardOutput 
      sOutput = oStreamReader.ReadToEnd() 
     End Using 
     Console.WriteLine(sOutput) 
+3

Wow, điều này phức tạp cho một kỳ công nhỏ như vậy ... –

6

Chỉ cần đặt đầu ra thành tệp văn bản?

MyCommand > "c:\file.txt" 

Sau đó đọc tệp.

+2

Thực ra, tôi đã tìm ra giải pháp tối qua trước khi đọc và nó khá gần. Tôi sẽ sử dụng >> thay vào đó vì tôi muốn nối thêm kết quả mỗi lần, nhưng cảm ơn bạn. –

+1

Tôi quên đề cập đến bạn nên xem xét 'MyCommand>" c: \ file.txt 2> & 1' nếu bạn cũng muốn nắm bắt * lỗi * báo cáo trong tệp. Theo mặc định đầu ra lỗi không được bao gồm trong tệp. – MarkJ

+0

giấu tên ẩn danh: chăm sóc để lại một bình luận? – MarkJ

0
Dim proc As New Process 

    proc.StartInfo.FileName = "C:\ipconfig.bat" 
    proc.StartInfo.UseShellExecute = False 
    proc.StartInfo.RedirectStandardOutput = True 
    proc.Start() 
    proc.WaitForExit() 

    Dim output() As String = proc.StandardOutput.ReadToEnd.Split(CChar 

(vbLf)) Đối Mỗi ln As String Trong đầu ra RichTextBox1.AppendText (ln & vbNewLine) lstScan.Items.Add (ln & vbNewLine) Tiếp theo

======================================= ============================ tạo tập tin thực thi trong hai dòng như hình dưới đây:

echo off

ipconfig

'chắc chắn rằng bạn lưu tập tin batch này như ipconfig.bat hoặc bất cứ tên u quyết định chọn nhưng chắc chắn u đặt dấu chấm dơi ở cuối của nó.

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