redirect - input from console application to another c# console application? -


मैं एसी # आवेदन को विकसित करना चाहता हूं (a.exe) कोड> (बी.एक्सई) b.exe कोई भी तर्क नहीं लेता है।

b.exe -call या b.exe कॉल और इतने पर काम नहीं करता

जब मैं cmd ​​से b.exe खोलता हूँ तो इस तरह से तर्क लेता है:

  b: call b: कमांड 2 .... b: कमांड n  

मैं b.exe से a.exe कैसे फ़ीड कर सकता / सकती हूं?

मैंने उपयोग किया है लेकिन यह काम नहीं करता है।

  var psi = new processstartInfo ("b.exe") {रीडायरेक्ट मानकआयात = सच, रीडायरेक्ट मानकऑप्टपुट = गलत, UseShellExecute = false}; Var p = नई प्रक्रिया {StartInfo = psi}; p.Start (); p.StandardInput.WriteLine ( "कॉल");  

यहां आपके प्रश्न से मैं समझता हूं:

    < Li> a.exe शुरू होता है b.exe
  • a.exe या तो कमांड लाइन तर्क या मानक इनपुट का उपयोग करता है कमांड / अनुरोध b.exe
  • b.exe के लिए कमांड / अनुरोध प्राप्त और मानक ओटपुट के माध्यम से जानकारी पास करता है
< P> कमांड लाइन तर्क का उपयोग करना थोड़ा सरल है, सिवाय इसके कि आपको प्रत्येक अनुरोध / कमांड के लिए कई बार b.exe को चलाने की आवश्यकता होगी।

  // b.exe स्थिर शून्य मुख्य (स्ट्रिंग [] आर्ग्स) {// कमांड लाइन आर्गिजेंस का उपयोग करके foreach (arg arg में args) प्रक्रिया एर्ग (arg); // यदि इनपुट का उपयोग कर रहा है, तो कुछ का उपयोग करें जैसे कि लाइन द्वारा लाइन // स्ट्रिंग पंक्ति = कंसोल .ReadLine (); // जबकि (रेखा! = "बाहर निकलें" ||! String.IsNullOrEmpty (लाइन)) // प्रक्रियाएआरजी (लाइन); // या आप इनपुट स्ट्रीम var reader = new StreamReader (Console.OpenStandardInput ()) पढ़ सकते हैं; Var text = reader.ReadToEnd (); // TODO: टेक्स्ट को पार्स और कमांड्स ढूंढें} स्थिर शून्य प्रोसेसअर्ज (स्ट्रिंग एजीआर) {if (arg == "help") कंसोल.रिइटलाइन ("b.exe मदद आउटपुट"); अगर (आरजीआर == "कॉल") कंसोल। WrightLine ("b.exe कॉल आउटपुट"); If (arg == "command") कंसोल। WrightLine ("b.exe आदेश आउटपुट"); } // a.exe स्थिर शून्य मुख्य (स्ट्रिंग [] args) {// परीक्षण - सहायता, कॉल, कमांड - & gt; भेजें To b.exe var psi = new processstartInfo ("b.exe", "help call command") {redirectStandardError = true, RedirectStandardInput = true, RedirectStandardOutput = true, UseShellExecute = false;}; Var p = नई प्रक्रिया () {StartInfo = psi}; P.ErrorDataReceived + = p_ErrorDataReceived; P.OutputDataReceived + = p_OutputDataReceived; p.Start (); p.BeginErrorReadLine (); p.BeginOutputReadLine (); // यदि मानक इनपुट के माध्यम से डेटा भेजना (इसे लिखने के बजाय लिखने की आवश्यकता हो सकती है, तो शायद इसे स्ट्रीमिंग के अंत (0x04 या ^ D / Ctrl-D) स्ट्रीमर लेखक = p.StandardInput; writer.WriteLine (" लेखक "वाइटलाइन" ("कॉल"); लेखक.प्रकाशित ("बाहर निकलने"); लेखक। बंद (); p.WaitForExit ();} स्थिर शून्य p_ErrorDataReceived (ऑब्जेक्ट प्रेषक, DataReceivedEventArgs ई) {Console.Error WriteLine ("a.exe त्रुटि:" + ई.डेटा ?? "(रिक्त)");} स्थिर शून्य p_OutputDataReceived (ऑब्जेक्ट प्रेषक, DataReceivedEventArgs ई) {Console.WriteLine ("a.exe प्राप्त:" + e.Data? 

एक विचार यह है कि आप पाइप उत्पादन नहीं कर सकते हैं? प्रशासनिक विशेषाधिकारों के साथ चल रहे कार्यक्रम से। आपको आउटपुट को बचाने और फिर आउटपुट को दूसरे प्रोग्राम में पास करना होगा।

मुझे कुछ समय पहले एक क्लास के साथ सहायक लाइब्रेरी मिली। "आंतरिक स्टार्ट" विधि ब्राउज़ करें प्रोक का एक उदाहरण के लिए essRunner।


Comments

Popular posts from this blog

apache - 504 Gateway Time-out The server didn't respond in time. How to fix it? -

c# - .net WebSocket: CloseOutputAsync vs CloseAsync -

c++ - How to properly scale qgroupbox title with stylesheet for high resolution display? -