2024年1月22日发(作者:)

随笔- 109 文章- 0 评论- 279

C#程序调用cmd执行命令

对于C#通过程序来调用cmd命令的操作,网上有很多类似的文章,但很多都不行,竟是漫天的拷贝。我自己测试整理了一下。

代码:

string str = ne();

s p = new s();

me = "";

llExecute = false; //是否使用操作系统shell启动

ctStandardInput = true;//接受来自调用程序的输入信息

ctStandardOutput = true;//由调用程序获取输出信息

ctStandardError = true;//重定向标准错误输出

NoWindow = true;//不显示程序窗口

();//启动程序

//向cmd窗口发送输入信息

ine(str + "&exit");

ush = true;

//ine("exit");

//向标准输入写入要执行的命令。这里使用&是批处理命令的符号,表示前面一个命令不管是否执行成功都执行后面(exit)命令,如果不执行exit命令,后面调用ReadToEnd()方法会假死

//同类的符号还有&&和||前者表示必须前一个命令执行成功才会执行后面的命令,后者表示必须前一个命令执行失败才会执行后面的命令

//获取cmd窗口的输出信息

string output = End();

//StreamReader reader = rdOutput;

//string line=ne();

//while (!tream)

//{

// str += line + " ";

// line = ne();

//}

rExit();//等待程序执行完退出进程

();

ine(output);

程序运行结果:

需要提醒注意的一个地方就是:在前面的命令执行完成后,要加exit命令,否则后面调用ReadtoEnd()命令会假死。

我在之前测试的时候没有加exit命令,输入其他命令后窗口就假死了,也没有输出内容。

对于执行cmd命令时如何以管理员身份运行,可以看我上一篇文章: C#如何以管理员身份运行程序 - 酷小孩 - 博客园

2014-7-28 新增:

另一种C#调用cmd命令的方法,不过这种方法在执行时会“闪一下” 黑窗口,各位在使用时可以按喜好来调用。

///

///运行cmd命令

///会显示命令窗口

///

///指定应用程序的完整路径

///执行命令行参数

staticbool RunCmd(string cmdExe, string cmdStr)

{

bool result = false;

try

{

using (Process myPro = new Process())

{

//指定启动进程是调用的应用程序和命令行参数

ProcessStartInfo psi = new ProcessStartInfo(cmdExe,

cmdStr);

nfo = psi;

();

rExit();

result = true;

}

}

catch

{

}

return result;

}

///

///运行cmd命令

///不显示命令窗口

///

///指定应用程序的完整路径

///执行命令行参数

staticbool RunCmd2(string cmdExe, string cmdStr)

{

bool result = false;

try

{

using (Process myPro = new Process())

{

me = "";

llExecute = false;

ctStandardInput = true;

ctStandardOutput = true;

ctStandardError = true;

NoWindow = true;

();

//如果调用程序路径中有空格时,cmd命令执行失败,可以用双引号括起来,在这里两个引号表示一个引号(转义)

string str = (@"""{0}"" {1} {2}", cmdExe, cmdStr, "&exit");

ine(str);

ush = true;

rExit();

result = true;

}

}

catch

{

}

return result;

}