VB.net

2012-01-10 11 views
13

में एक खोल कमांड का आउटपुट प्राप्त करें मेरे पास एक VB.net प्रोग्राम है जिसमें मैं शैल फ़ंक्शन को कॉल करता हूं। मैं इस कोड से फ़ाइल में उत्पादित पाठ आउटपुट प्राप्त करना चाहता हूं। हालांकि, यह निष्पादित कोड का वापसी मूल्य नहीं है, इसलिए मुझे वास्तव में नहीं पता कि कैसे करें।VB.net

यह प्रोग्राम एक सेवा है लेकिन डिस्क की कोई समस्या नहीं है क्योंकि मैं पहले से ही अन्य जानकारी लॉग करता हूं। पूरी सेवा में कई धागे हैं इसलिए मुझे यह भी सुनिश्चित करना होगा कि जब फ़ाइल लिखी जाती है तो यह पहले से ही एक्सेस नहीं होती है।

उत्तर

24

आप शैल से आउटपुट कैप्चर नहीं कर पाएंगे।

आपको इसे एक प्रक्रिया में बदलने की आवश्यकता होगी और आपको प्रक्रिया से Standard Output (और संभवतः त्रुटि) धाराओं को कैप्चर करने की आवश्यकता होगी।

 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

है वाह, यह इतनी छोटी सी काम के लिए जटिल है ... –

6

बस आउटपुट को टेक्स्ट फ़ाइल में पाइप करें?

MyCommand > "c:\file.txt" 

फिर फ़ाइल पढ़ें।

+2

असल में, मुझे यह पढ़ने से पहले कल रात समाधान मिला और यह काफी करीब है। मैं इसका उपयोग करूंगा >> इसके बजाय क्योंकि मैं हर बार परिणाम जोड़ना चाहता हूं, लेकिन वैसे भी धन्यवाद। –

+1

मैं उल्लेख करना भूल गया कि आपको 'MyCommand> "c: \ file.txt 2> और 1' पर विचार करना चाहिए यदि आप फ़ाइल में * त्रुटि * रिपोर्ट कैप्चर करना चाहते हैं। डिफ़ॉल्ट त्रुटि आउटपुट फ़ाइल में शामिल नहीं हैं। – MarkJ

+0

अनाम डाउनवॉटर: एक टिप्पणी छोड़ने की देखभाल? – 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)) स्ट्रिंग के रूप में ln प्रत्येक के लिए उत्पादन में RichTextBox1.AppendText (& vbNewLine ln) lstScan.Items.Add (& ln vbNewLine:

यहाँ एक उदाहरण है) अगला

=========================================== ============================ एक बनाएं दो पंक्तियों में बैच फ़ाइल नीचे दिखाया गया है:

बंद गूंज

ipconfig

'वाकई ipconfig.bat के रूप में इस बैच फ़ाइल को बचाने कर सकते हैं या जो भी नाम यू लेने लेकिन यकीन है कि यू डॉट बल्ले डाल करने का निर्णय इसके अंत में।

 संबंधित मुद्दे