📜  c#执行shell命令 - C#(1)

📅  最后修改于: 2023-12-03 14:39:48.923000             🧑  作者: Mango

以C#执行Shell命令 - C#

在C#中,我们可以使用System.Diagnostics.Process类来执行Shell命令。Process类允许我们启动新的进程并与之进行交互。本篇介绍如何使用C#执行Shell命令,并提供了一些常见的示例代码。

执行简单的Shell命令

要执行一个简单的Shell命令,可以使用Process.Start方法。以下是一个基本示例:

using System;
using System.Diagnostics;

class Program
{
    static void Main()
    {
        // 创建一个新进程对象
        Process process = new Process();

        // 设置进程的启动信息
        process.StartInfo.FileName = "cmd.exe";  // Shell的可执行文件
        process.StartInfo.Arguments = "/C echo Hello World";  // Shell命令及参数
        process.StartInfo.UseShellExecute = false;  // 不使用操作系统的Shell启动进程
        process.StartInfo.RedirectStandardOutput = true;  // 重定向输出流

        // 启动进程
        process.Start();

        // 从输出流中读取结果
        string output = process.StandardOutput.ReadToEnd();

        // 等待命令执行结束
        process.WaitForExit();

        // 打印结果
        Console.WriteLine(output);
    }
}

上述示例中,我们创建了一个新的Process对象来表示要执行的进程。然后,设置了进程的启动信息,包括Shell的可执行文件名、要执行的命令及其参数,并设置不使用操作系统的Shell来启动进程,并且将输出流重定向到程序中。之后,我们通过调用Start方法来启动进程,然后使用StandardOutput属性从输出流中读取结果。最后,我们等待命令执行结束,并打印输出结果。

执行高级的Shell命令

有些Shell命令可能需要更多的控制权,例如在命令执行过程中输入更多的数据或者处理复杂的输出。以下是一个使用Process类的高级示例,展示了如何执行更复杂的Shell命令:

using System;
using System.Diagnostics;
using System.IO;

class Program
{
    static void Main()
    {
        // 创建一个新进程对象
        Process process = new Process();

        // 设置进程的启动信息
        process.StartInfo.FileName = "powershell.exe";  // Shell的可执行文件
        process.StartInfo.Arguments = "-ExecutionPolicy Bypass -NoLogo -NoProfile -Command \"Get-Process | Select-Object Name, Id\"";  // Shell命令及参数
        process.StartInfo.UseShellExecute = false;  // 不使用操作系统的Shell启动进程
        process.StartInfo.RedirectStandardOutput = true;  // 重定向输出流
        process.StartInfo.RedirectStandardInput = true;  // 重定向输入流
        process.StartInfo.CreateNoWindow = true;  // 不创建新窗口

        // 启动进程
        process.Start();

        // 向输入流中写入数据(这里示例向命令中的参数交互式输入)
        StreamWriter writer = process.StandardInput;
        writer.WriteLine("yes");

        // 从输出流中读取结果
        string output = process.StandardOutput.ReadToEnd();

        // 等待命令执行结束
        process.WaitForExit();

        // 打印结果
        Console.WriteLine(output);
    }
}

上述示例中,我们执行了一个复杂的PowerShell命令,该命令通过管道|获取正在运行的进程,并选取了进程的名称和ID。进程启动信息的设置与之前的示例类似,但是我们还设置了重定向输入流,并创建了一个StreamWriter对象来向输入流中写入数据(这里示例中写入了"yes")。然后,我们通过调用Start方法来启动进程,并使用StandardInput属性向输入流中写入数据。最后,我们读取输出结果,等待命令执行结束,并打印输出结果。

以上是使用C#执行Shell命令的简介和示例代码,希望对程序员们有所帮助。使用Process类可以轻松执行各种Shell命令,并与其进行交互,为开发工作带来了更多的灵活性。