【编程技巧】执行DOS命令

C++可以通过[code]system()[/code]执行系统命令,那么C#如何执行系统命令呢?

步骤

C#并没有直接提供执行系统命令的函数,但是我们可以通过静默启动cmd实现。

注:请先引用命名空间[code]using System.Diagnostics;[/code]

1.初始化cmd进程对象

//创建进程对象
Process process = new Process();
//设定此进程对象的信息
ProcessStartInfo startInfo = new ProcessStartInfo();
//设定将要打开的应用
startInfo.FileName = System.Environment.GetFolderPath(Environment.SpecialFolder.System) + "\\cmd.exe";
//设定需要执行的命令,“/C”表示执行完命令后马上退出  
startInfo.Arguments = "/C " + "执行的命令";
//不使用系统外壳程序启动
startInfo.UseShellExecute = false;
//不重定向输入
startInfo.RedirectStandardInput = false;
//重定向输出(用于读取输出)
startInfo.RedirectStandardOutput = true;
//不创建窗口,不显示
startInfo.CreateNoWindow = true;
process.StartInfo = startInfo;

2. 打开cmd,读取输入,并退出

try
{
    //启动程序
    process.Start();
    //无限等待退出
    process.WaitForExit();
    //获得输出信息
    string outstr = process.StandardOutput.ReadToEnd();
}
finally
{
    process.Close();
}

实例

读取输入的命令,执行后输出结果

[s]展开代码[p]

using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
namespace CMD
{
    class Program
    {
        //创建进程对象
        static string[] c = { "1", "1" };
        static Process process = new Process();
        static void Main(string[] args)
        {
            if (args != c)
            {
                //设置信息
                Console.Beep(4000, 500);
                Console.Title = "CMD模拟";
                Console.WriteLine("[ 控制台模拟 Ver=1.0 Author=C#之家 Website=https://www.chsarphome.xyz ]");
            }
            Console.Write("->");
            //设定此进程对象的信息
            ProcessStartInfo startInfo = new ProcessStartInfo();
            //设定将要打开的应用
            startInfo.FileName = System.Environment.GetFolderPath(Environment.SpecialFolder.System) + "\\cmd.exe";
            //设定需要执行的命令,“/C”表示执行完命令后马上退出  
            startInfo.Arguments = "/C " + Console.ReadLine();
            if (startInfo.Arguments == "/C exit") 
            {
                Environment.Exit(0);
            }
            if (startInfo.Arguments == "/C cls")
            {
                Console.Clear();
                Main(c);
            }
            if (startInfo.Arguments == "/C ver")
            {
                Console.WriteLine("[ 控制台模拟 Ver=1.0 Author=C#之家 Website=https://www.chsarphome.xyz ]");
                Main(c);
            }
            //不使用系统外壳程序启动
            startInfo.UseShellExecute = false;
            //不重定向输入
            startInfo.RedirectStandardInput = false;
            //重定向输出(用于读取输出)
            startInfo.RedirectStandardOutput = true;
            //不创建窗口,不显示
            startInfo.CreateNoWindow = true;
            process.StartInfo = startInfo;
            try
            {
                //启动程序
                process.Start();
                //无限等待退出
                process.WaitForExit();
                //获得输出信息
                string outstr = process.StandardOutput.ReadToEnd();
                Console.WriteLine(outstr);
            }
            finally
            {
                process.Close();
            }
            Main(c);
        }
    }
}

[/p]

声明:本文为原创,作者为 admin,转载时请保留本声明及附带文章链接:https://cszj.wang/archives/674.html