2009-07-08 12 views

उत्तर

39

तो proc.StartInfo.UseShellExecute झूठी है, तो आप इस प्रक्रिया को लॉन्च कर रहे हैं और उपयोग कर सकते हैं:

proc.StartInfo.CreateNoWindow = true; 

तो proc.StartInfo.UseShellExecute सच है, तो ओएस है प्रक्रिया को लॉन्च करना और आपको प्रक्रिया के लिए "संकेत" प्रदान करना होगा:

proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; 

हालांकि कॉल एड एप्लिकेशन इस बाद के अनुरोध को अनदेखा कर सकता है।

हैं का उपयोग कर UseShellExecute = झूठी, आप किसी भी प्रवेश का उत्पादन किया कब्जा करने के लिए मानक आउटपुट/त्रुटि पुनः निर्देशित विचार करने के लिए, चाहते हो सकता है:

proc.StartInfo.UseShellExecute = false; 
proc.StartInfo.RedirectStandardOutput = true; 
proc.OutputDataReceived += new DataReceivedEventHandler(ProcessOutputHandler); 
proc.StartInfo.RedirectStandardError = true; 
proc.ErrorDataReceived += new DataReceivedEventHandler(ProcessOutputHandler); 

और तरह

private void ProcessOutputHandler(object sendingProcess, DataReceivedEventArgs outLine) 
{ 
    if (!String.IsNullOrEmpty(outLine.Data)) // use the output outLine.Data somehow; 
} 

एक समारोह है एक भी नहीं है CreateNoWindow पर an MSDN blog पर अच्छा पृष्ठ शामिल है।

विंडोज में एक बग भी है जो एक संवाद फेंक सकता है और CreateNoWindow को हराने के लिए यदि आप उपयोगकर्ता नाम/पासवर्ड पास कर रहे हैं। विवरण

http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=98476 http://support.microsoft.com/?kbid=818858

+0

कभी-कभी काम करता है, अन्य नहीं। क्या यह बैट फ़ाइल कमांड पर निर्भर करता है? – Ahmed

+0

अहमद, मैंने जवाब को और अधिक व्यापक बना दिया है और खिड़की को छिपाने के लिए आपके पास दो अलग-अलग विकल्प हैं। इसके अलावा, आवेदन के आधार पर, मुझे लगता है कि आप अभी भी इसे तोड़ सकते हैं और अपने बेहतर प्रयासों के बावजूद कुछ खिड़कियां बना सकते हैं। –

5

उपयोग: process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

+1

कभी कभी काम करता है, दूसरों को नहीं करता है 'टी। क्या यह बैट फ़ाइल कमांड पर निर्भर करता है? – Ahmed

7

Process properties के अनुसार, यदि आप एक की क्या ज़रूरत है:

संपत्ति: CreateNoWindow
नोट: आप एक कमांड लाइन कार्यक्रम चुपचाप चलाने के लिए अनुमति देता है। यह कंसोल विंडो फ़्लैश नहीं करता है।

और:

संपत्ति: WindowStyle
ध्यान दें: इस का उपयोग करें के रूप में छिपा खिड़कियों स्थापित करने के लिए। लेखक ने ProcessWindowStyle.Hidden अक्सर उपयोग किया है।

उदाहरण के तौर पर!

static void LaunchCommandLineApp() 
{ 
    // For the example 
    const string ex1 = "C:\\"; 
    const string ex2 = "C:\\Dir"; 

    // Use ProcessStartInfo class 
    ProcessStartInfo startInfo = new ProcessStartInfo(); 
    startInfo.CreateNoWindow = false; 
    startInfo.UseShellExecute = false; 
    startInfo.FileName = "dcm2jpg.exe"; 
    startInfo.WindowStyle = ProcessWindowStyle.Hidden; 
    startInfo.Arguments = "-f j -o \"" + ex1 + "\" -z 1.0 -s y " + ex2; 

    try 
    { 
     // Start the process with the info we specified. 
     // Call WaitForExit and then the using statement will close. 
     using (Process exeProcess = Process.Start(startInfo)) 
     { 
      exeProcess.WaitForExit(); 
     } 
    } 
    catch 
    { 
     // Log error. 
    } 
} 
+1

कभी-कभी काम करता है, अन्य नहीं। क्या यह बैट फ़ाइल कमांड पर निर्भर करता है? – Ahmed

0

यह वही मेरे लिए काम किया है के लिए, जब आप इनपुट और आउटपुट के सभी अनुप्रेषित, और खिड़की छिपा सेट यह काम करना चाहिए

  Process p = new Process(); 
      p.StartInfo.RedirectStandardError = true; 
      p.StartInfo.RedirectStandardInput = true; 
      p.StartInfo.RedirectStandardOutput = true; 
      p.StartInfo.UseShellExecute = false; 
      p.StartInfo.CreateNoWindow = true; 
संबंधित मुद्दे