C#通过程序来调用cmd命令的操作可以应用与许多地方,例如:可以通过Process调用cmd命令的方法,获取NXN alienbrain Manager Client(AB资源管理)中的资源信息,完成与其他指定资源的对比检查;
1:基本使用方法:
使用前需加上: using System.Diagnostics;
同步重定向代码如下:
第一步:确定必要成分
1 Process process = new Process();
2 process.StartInfo.UseShellExecute = false; // 是否使用外壳程序
3 process.StartInfo.CreateNoWindow = true; //是否在新窗口中启动该进程的值
4 process.StartInfo.RedirectStandardInput = true; // 重定向输入流
5 process.StartInfo.RedirectStandardOutput= true; //重定向输出流
6 process.StartInfo.RedirectStandardError= true; //重定向错误流
需要注意的是:若要使用 StandardOutput,必须将 :
ProcessStartInfo.UseShellExecute = false;
ProcessStartInfo.RedirectStandardOutput = true;
否则,读取StandardOutput 流时将引发异常;
接下来出入执行文件的路径:
1 process.StartInfo.FileName = "";//待输入的执行文件路径
1 process.Start();
2 process.StandardInput.WriteLine(textBox1.Text); //从textBox1中输入信息到输入流
3 string output = process.StandardOutput.ReadToEnd();//获取exe处理之后的输出信息到output
4 string error = process.StandardError.ReadToEnd(); //获取错误信息到error
5 process.Close(); //close进程
这样就可以将原本exe输出到黑框重定向到该程序的output中;
将错误输出重定向到error中,用于之后的操作;
值得注意的是:所执行文件的当前目录在 项目\bin\Debug下
2:代码示例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.ComponentModel;
using System.IO;
namespace Demo
{
class MyProcess
{
// 当找不到文件或者拒绝访问时出现的Win32错误码
const int ERROR_FILE_NOT_FOUND = 2;
const int ERROR_ACCESS_DENIED = 5;
// 通过命令行获取help显示信息
void PrintDoc()
{
Process process = new Process();
try
{
process.StartInfo.UseShellExecute = false; //是否使用操作系统shell启动
process.StartInfo.CreateNoWindow = true; //是否在新窗口中启动该进程的值 (不显示程序窗口)
process.StartInfo.RedirectStandardInput = true; // 接受来自调用程序的输入信息
process.StartInfo.RedirectStandardOutput = true; // 由调用程序获取输出信息
process.StartInfo.RedirectStandardError = true; //重定向标准错误输出
process.StartInfo.FileName = "cmd.exe";
process.Start(); // 启动程序
process.StandardInput.WriteLine("help"); //向cmd窗口发送输入信息
process.StandardInput.AutoFlush = true;
// 前面一个命令不管是否执行成功都执行后面(exit)命令,如果不执行exit命令,后面调用ReadToEnd()方法会假死
process.StandardInput.WriteLine("exit");
StreamReader reader = process.StandardOutput;//获取exe处理之后的输出信息
string curLine = reader.ReadLine(); //获取错误信息到error
while (!reader.EndOfStream)
{
if (!string.IsNullOrEmpty(curLine))
{
Console.WriteLine(curLine);
}
curLine = reader.ReadLine();
}
reader.Close(); //close进程
process.WaitForExit(); //等待程序执行完退出进程
process.Close();
}
catch (Win32Exception e)
{
if (e.NativeErrorCode == ERROR_FILE_NOT_FOUND)
{
Console.WriteLine(e.Message + ". 检查文件路径.");
}
else if (e.NativeErrorCode == ERROR_ACCESS_DENIED)
{
Console.WriteLine(e.Message + ". 你没有权限操作文件.");
}
}
}
public static void Main()
{
MyProcess myProcess = new MyProcess();
myProcess.PrintDoc();
Console.ReadKey();
}
}
}
运行结果如下:
此次运行结果与在控制台Dos窗口输入“help”命令的运行结果一样;