मैं एक प्रक्रिया खोलने और plink चल के माध्यम से ग # से SSH कनेक्शन खोलना चाहते हैं। सभी आउटपुट एकत्र किए जाने चाहिए और परिणामों के आधार पर कार्यक्रम एसएसएच को कार्रवाई करेगा। मेरी बड़ी समस्या यह है कि यदि मैं अलग-अलग स्क्रिप्ट्स और मुझे (स्वचालित) उपयोगकर्ता इंटरैक्शन की आवश्यकता है तो मैं एक जोड़े का उपयोग कर रहा हूं। इसलिए मुझे सभी आउटपुट डेटा (मानक आउटपुट, मानक त्रुटि और कंसोल) पर कब्जा करना है।कब्जा सभी (stdout, stderr और CON) cmd साथ सी # plink को क्रियान्वित करने के निर्गम (बाहर std + अं ठीक है, CON काम नहीं कर रहा)
निम्न परीक्षण बैच को देखते हुए मामले को और अधिक स्पष्ट करना चाहिए:
1: @ECHO OFF
2: ECHO StdOut
3: ECHO StdErr 1>&2
4: ECHO Cons>CON
कोड की तरह है:
Process process;
Process process;
process = new Process();
process.StartInfo.FileName = @"cmd.exe";
process.StartInfo.Arguments = "/c test.bat";
process.StartInfo.UseShellExecute = false;
process.StartInfo.ErrorDialog = false;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.RedirectStandardInput = true;
process.Start();
process.OutputDataReceived += new DataReceivedEventHandler(process_OutputDataReceived);
process.ErrorDataReceived += new DataReceivedEventHandler(process_OutputDataReceived);
process.BeginOutputReadLine();
process.BeginErrorReadLine();
StreamWriter inputWriter = process.StandardInput;
[...]
मैं लाइनों 2 + 3 पर कब्जा करने में सक्षम हूँ, लेकिन नहीं 4 (कुछ कार्यक्रमों द्वारा उपयोग किया जाता है)। मैंने cmd.exe की बजाय शुरुआती बिंदु के रूप में पावरहेल (या सीधे प्लग) की कोशिश की है, लेकिन एक ही परिणाम।
वहाँ सी # में किसी भी तरह के रूप में अच्छी सांत्वना बाहर कब्जा करने के लिए या आप किसी भी तीसरे पक्ष के कमांड लाइन पता stdout या कुछ इस तरह के लिए बाहर CON रीडायरेक्ट करने के लिए सक्षम किया जा रहा है है?
मानक आउटपुट और कंसोल के बीच क्या अंतर है? –
@DanielHilgarth मैं विंडोज के लिए पूरी तरह से निश्चित नहीं हूं, लेकिन यूनिक्स मानक आउटपुट पर कहीं भी निर्देशित किया जाएगा (फ़ाइल या कहीं भी नहीं), जबकि दूसरा हमेशा (टेक्स्ट मोड) कंसोल पर जाएगा। उदाहरण के लिए, यदि आप दूरस्थ रूप से लॉग इन हैं, तो दिखाता है। कंसोल आउटपुट हमेशा भौतिक कंसोल/कंप्यूटर पर जाता है (मुझे लगता है कि इसे बदलने के लिए कुछ विकल्प भी हैं, लेकिन आम तौर पर बोलते हैं)। –