执行cmd并返回程序结果

001// Define the namespaces used by this sample.
002using System;
003using System.Text;
004using System.Globalization;
005using System.IO;
006using System.Diagnostics;
007using System.Threading;
008using System.ComponentModel;
009  
010  
011namespace ProcessAsyncStreamSamples
012{
013  
014    class ProcessNetStreamRedirection
015    {
016        // Define static variables shared by class methods.
017        private static StreamWriter streamError =null;
018        private static String netErrorFile = "";
019        private static StringBuilder netOutput = null;
020        private static bool errorRedirect = false;
021        private static bool errorsWritten = false;
022  
023        public static void RedirectNetCommandStreams()
024        {
025            String netArguments;
026            Process netProcess;
027  
028            // Get the input computer name.
029            Console.WriteLine("Enter the computer name for the net view command:");
030            netArguments = Console.ReadLine().ToUpper(CultureInfo.InvariantCulture);
031            if (String.IsNullOrEmpty(netArguments))
032            {
033                // Default to the help command if there is not an input argument.
034                netArguments = "/?";
035            }
036  
037            // Check if errors should be redirected to a file.
038            errorsWritten = false;
039            Console.WriteLine("Enter a fully qualified path to an error log file");
040            Console.WriteLine("  or just press Enter to write errors to console:");
041            netErrorFile = Console.ReadLine().ToUpper(CultureInfo.InvariantCulture);
042            if (!String.IsNullOrEmpty(netErrorFile))
043            {
044                errorRedirect = true;
045            }
046  
047            // Note that at this point, netArguments and netErrorFile
048            // are set with user input.  If the user did not specify
049            // an error file, then errorRedirect is set to false.
050  
051            // Initialize the process and its StartInfo properties.
052            netProcess = new Process();
053            netProcess.StartInfo.FileName = "Net.exe";
054  
055            // Build the net command argument list.
056            netProcess.StartInfo.Arguments = String.Format("view {0}"
057                netArguments);
058  
059            // Set UseShellExecute to false for redirection.
060            netProcess.StartInfo.UseShellExecute = false;
061  
062            // Redirect the standard output of the net command.  
063            // This stream is read asynchronously using an event handler.
064            netProcess.StartInfo.RedirectStandardOutput = true;
065            netProcess.OutputDataReceived += new DataReceivedEventHandler(NetOutputDataHandler);
066            netOutput = new StringBuilder();
067  
068            if (errorRedirect)
069            {
070                // Redirect the error output of the net command. 
071                netProcess.StartInfo.RedirectStandardError = true;
072                netProcess.ErrorDataReceived += new DataReceivedEventHandler(NetErrorDataHandler);
073            }
074            else 
075            {
076                // Do not redirect the error output.
077                netProcess.StartInfo.RedirectStandardError = false;
078            }
079  
080            Console.WriteLine("/nStarting process: net {0}"
081                netProcess.StartInfo.Arguments);
082            if (errorRedirect)
083            {
084                Console.WriteLine("Errors will be written to the file {0}"
085                    netErrorFile);
086            }
087  
088            // Start the process.
089            netProcess.Start();
090  
091            // Start the asynchronous read of the standard output stream.
092            netProcess.BeginOutputReadLine();
093  
094            if (errorRedirect)
095            {
096                // Start the asynchronous read of the standard
097                // error stream.
098                netProcess.BeginErrorReadLine();
099            }
100  
101            // Let the net command run, collecting the output.
102            netProcess.WaitForExit();
103  
104            if (streamError != null)
105            {
106                // Close the error file.
107                streamError.Close();
108            }
109            else 
110            {
111                // Set errorsWritten to false if the stream is not
112                // open.   Either there are no errors, or the error
113                // file could not be opened.
114                errorsWritten = false;
115            }
116  
117            if (netOutput.Length > 0)
118            {
119                // If the process wrote more than just
120                // white space, write the output to the console.
121                Console.WriteLine("/nPublic network shares from net view:/n{0}/n"
122                    netOutput);
123            }
124  
125            if (errorsWritten)
126            {
127                // Signal that the error file had something 
128                // written to it.
129                String [] errorOutput = File.ReadAllLines(netErrorFile);
130                if (errorOutput.Length > 0)
131                {
132                    Console.WriteLine("/nThe following error output was appended to {0}.",
133                        netErrorFile);
134                    foreach (String errLine in errorOutput)
135                    {
136                        Console.WriteLine("  {0}", errLine);
137                    }
138                }
139                Console.WriteLine();
140            }
141  
142            netProcess.Close();
143  
144        }
145  
146        private static void NetOutputDataHandler(object sendingProcess, 
147            DataReceivedEventArgs outLine)
148        {
149            // Collect the net view command output.
150            if (!String.IsNullOrEmpty(outLine.Data))
151            {
152                // Add the text to the collected output.
153                netOutput.Append(Environment.NewLine + "  " + outLine.Data);
154            }
155        }
156  
157        private static void NetErrorDataHandler(object sendingProcess, 
158            DataReceivedEventArgs errLine)
159        {
160            // Write the error text to the file if there is something
161            // to write and an error file has been specified.
162  
163            if (!String.IsNullOrEmpty(errLine.Data))
164            {
165                if (!errorsWritten)
166                {
167                    if (streamError == null)
168                    {
169                        // Open the file.
170                        try 
171                        {
172                            streamError = new StreamWriter(netErrorFile, true);
173                        }
174                        catch (Exception e)
175                        {
176                            Console.WriteLine("Could not open error file!");
177                            Console.WriteLine(e.Message.ToString());
178                        }
179                    }
180  
181                    if (streamError != null)
182                    {
183                        // Write a header to the file if this is the first
184                        // call to the error output handler.
185                        streamError.WriteLine();
186                        streamError.WriteLine(DateTime.Now.ToString());
187                        streamError.WriteLine("Net View error output:");
188                    }
189                    errorsWritten = true;
190                }
191  
192                if (streamError != null)
193                {
194                    // Write redirected errors to the file.
195                    streamError.WriteLine(errLine.Data);
196                    streamError.Flush();
197                }
198            }
199        }
200    }
201}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值