2009-01-12 14 views
9

मैं एक कंसोल एप्लिकेशन चलाने के लिए चाहता हूं जो एक फ़ाइल आउटपुट करेगा।Process.Start का उपयोग करते समय मैं कंसोल एप्लिकेशन उपयोगकर्ता इंटरफ़ेस को कैसे छिपा सकता हूं?

मैं उपयोगकर्ता निम्न कोड:

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

जब यह कंसोल विंडो चलाता है प्रकट होता है। मैं कंसोल विंडो को छिपाना चाहता हूं ताकि उपयोगकर्ता द्वारा इसे देखा न जाए।

क्या यह संभव है? प्रक्रिया का उपयोग कर रहा है। एक और कंसोल अनुप्रयोग शुरू करने के लिए सबसे अच्छा तरीका शुरू करें?

उत्तर

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(); 

यह कंसोल विंडो प्रदर्शित किए बिना एक बच्चे की प्रक्रिया शुरू कर देंगे, और आदि

+0

आपका उत्तर रास्ता अधिक जानकारीपूर्ण है तो मेरा +1 –

+0

मुझे बस 2 घंटे पहले एक ही चीज़ करना था :) –

+0

आप StreamReaders और StreamWriter के साथ कुछ भी करना भूल गए। –

-1

हमने कमांड लाइन प्रोग्रामिंग का उपयोग करके हमारी प्रक्रियाओं को निष्पादित करके अतीत में ऐसा किया है।

5

ProcessStartInfo में जांचें और WindowStyle = ProcessWindowStyle.Hidden और CreateNoWindow = true सेट करें।

+1

सांत्वना ऐप के लिए, मैंने पाया है कि आप बस जरूरत है ** WindowStyle = ProcessWindowStyle.Hidden **। आपको ** CreateNoWindow = true ** की आवश्यकता नहीं है। –

1

आप इस प्रक्रिया के उत्पादन, जबकि यह निष्पादित हो रहा है पुनः प्राप्त करना चाहते हैं तो StandardOutput की कैप्चरिंग, की अनुमति देगा, आप निम्नलिखित (उदाहरण के 'पिंग' कमांड का उपयोग करता है) कर सकते हैं:

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 
संबंधित मुद्दे

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