您的位置:首页 > 编程语言 > C#

C#中隐式操作CMD命令行窗口 (转)

2011-09-06 08:55 369 查看
MS的CMD命令行是一种重要的操作界面,一些在C#中不那么方便完成的功能,在CMD中几个简单的命令或许就可以轻松搞定,如果能在C#中能完成CMD窗口的功能,那一定可以使我们的程序简便不少。

下面介绍一种常用的在C#程序中调用CMD.exe程序,并且不显示命令行窗口界面,来完成CMD中各种功能的简单方法。

如下所示:

System.Diagnosties.Process p=new
System.Diagnosties.Process();
p.StartInfo.FileName="cmd.exe";//要执行的程序名称
p.StartInfo.UseShellExecute=false;
p.StartInfo.RedirectStanderInput=true;//可能接受来自调用程序的输入信息
p.StartInfo.RedirectStanderOutput=true;//由调用程序获取输出信息
p.StartInfo.CreateNoWindow=true;//不显示程序窗口
p.Start();//启动程序
//向CMD窗口发送输入信息:
p.StanderInput.WriteLine("shutdown
-r t 10"); //10秒后重启(C#中可不好做哦)
//获取CMD窗口的输出信息:
string sOutput =
p.StandardOutput.ReadToEnd();有啦以下代码,就可以神不知鬼不觉的操作CMD啦。总之,Process类是一个非常有用的类,它十分方便的利用第三方的程序扩展了C#的功能。

[b]最好的实现方式是使用事件:[/b]

// some of the flags are not needed
process.StartInfo.CreateNoWindow = true;
process.StartInfo.ErrorDialog = false;
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.RedirectStandardInput = true;
process.StartInfo.RedirectStandardOutput = true;
process.EnableRaisingEvents = true;
process.OutputDataReceived += process_OutputDataReceived;
process.ErrorDataReceived += process_OutputDataReceived;
process.Exited += process_Exited;
process.Start();
process.BeginErrorReadLine();
process.BeginOutputReadLine();

void process_Exited(object sender, System.EventArgs e)
{
// do something when process terminates;
}

void process_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
// a line is writen to the out stream. you can use it like:
string s = e.Data;
}

void process_ErrorDataReceived(object sender, DataReceivedEventArgs e)
{
// a line is writen to the out stream. you can use it like:
string s = e.Data;
}

c#执行shell

private void Form1_Load(object sender, EventArgs e)

{

//实例一个process类

Process process = new Process();

//设定程序名

process.StartInfo.FileName = "cmd.exe";

//关闭Shell的使用

process.StartInfo.UseShellExecute = false;

//重新定向标准输入,输入,错误输出

process.StartInfo.RedirectStandardInput = true;

process.StartInfo.RedirectStandardOutput = true;

process.StartInfo.RedirectStandardError = true;

//设置cmd窗口不显示

process.StartInfo.CreateNoWindow = true;

//开始

process.Start();

//输入命令,退出

process.StandardInput.WriteLine("ping 192.168.0.1");

//process.StandardInput.WriteLine("netstat");

process.StandardInput.WriteLine("exit");

//获取结果

string strRst = process.StandardOutput.ReadToEnd();

//显示结果到RichTextBox

this.richTextBox1.Text = strRst;

}

线程重定向问题

描叙:打开cmd窗口,进入要编译的目录的d:linuxcase_3,在cmd窗口打开grads程序,在grads程序中执行out.gs,退出grads,退出cmd
编译错误:未重定向
private void Form1_Load(object sender, EventArgs e)
{

//实例一个process类
Process process = new Process();
//设定程序名
process.StartInfo.FileName = "cmd.exe";
//关闭Shell的使用
process.StartInfo.UseShellExecute = false;
//重新定向标准输入,输入,错误输出
process.StartInfo.RedirectStandardInput = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
//设置cmd窗口不显示
process.StartInfo.CreateNoWindow = false;
//开始
process.Start();
//输入命令,退出
process.StandardInput.WriteLine(@"cd d:linuxcase_3");
//在cmd中打开grads程序,在进程中产生grads.exe
process.StandardInput.WriteLine("grads");
process.StandardInput.WriteLine("y");

bool isIniit = true;
Process processTemp;
while (isIniit)
{
Process[] processeszu = System.Diagnostics.Process.GetProcesses();//获取系统进程

string processnamelist = string.Empty;
for (int i = 0; i < processeszu.Length - 1; i++)
{
processTemp = processeszu;
if (processTemp.ProcessName == "Grads")//判断Grads这个进程是否打开
{
processTemp.StartInfo.RedirectStandardInput = true;
processTemp.StandardInput.WriteLine(@"out.gs");
processTemp.StandardInput.WriteLine("quit");
isIniit = false;
break;
}

}
}

process.StandardInput.WriteLine("exit");

//获取结果

//显示结果到RichTextBox
this.richTextBox1.Text = process.StandardOutput.ReadToEnd();
}


Process类详细介绍

//启动浏览器,并打开指定的地址
string ipAddress = "127.0.0.1";
try
catch (Exception)

Process p = new Process();
p.StartInfo.FileName = "iexplore.exe";
p.StartInfo.Arguments = "http://" + ipAddress + "/WebFinanceAllowance/";
p.Start();
p.Close();

//关闭打开的进程
if (!p.HasExited)
//启动资源管理器,并打开指定路径
Process.Start("explorer.exe", "C:\\mysql");
//使用process类来执行dos命令
Process process = new Process();
process.StartInfo.FileName = "cmd.exe";
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardInput = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.CreateNoWindow = true;

//开始卸载
process.Start();
process.StandardInput.WriteLine("cd C:\\mysql\\bin");
process.StandardInput.WriteLine("net stop mysql");
process.StandardInput.WriteLine("mysqld -remove");
process.StandardInput.WriteLine("exit");
process.Close();
//卸载完毕
1 //用msiexec.exe执行一个安装程序
2 string fileName = setupPath + "Installer.msi";
3 Process p = new Process();
4 p.StartInfo.FileName = "msiexec.exe";
5 p.StartInfo.Arguments = string.Format(" /i {0} /passive", fileName);
6 p.StartInfo.UseShellExecute = false;
7 p.StartInfo.RedirectStandardInput = true;
8 p.StartInfo.RedirectStandardOutput = true;
9 p.StartInfo.CreateNoWindow = false;
p.Start();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: