C# Process方法调用cmd执行命令

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”命令的运行结果一样;






你可以使用C#的`Process`类来启动命令行并执行命令,同时使用`Timer`类来定时调用方法。这样就可以避免阻塞了。 以下是一个示例代码: ```csharp using System; using System.Diagnostics; using System.Timers; namespace ConsoleApp1 { class Program { static void Main(string[] args) { Timer timer = new Timer(5000); // 定时器间隔为5秒 timer.Elapsed += new ElapsedEventHandler(OnTimedEvent); timer.Enabled = true; Console.WriteLine("Press any key to exit..."); Console.ReadKey(); } private static void OnTimedEvent(object source, ElapsedEventArgs e) { Console.WriteLine("Executing command..."); Process process = new Process(); process.StartInfo.FileName = "cmd.exe"; process.StartInfo.Arguments = "/C dir"; // 执行dir命令 process.StartInfo.UseShellExecute = false; process.StartInfo.RedirectStandardOutput = true; process.Start(); string output = process.StandardOutput.ReadToEnd(); Console.WriteLine(output); process.WaitForExit(); process.Close(); Console.WriteLine("Command executed."); } } } ``` 在上面的示例中,`OnTimedEvent`方法会定时执行,启动命令行并执行`dir`命令。注意,我们使用`/C`参数来告诉命令行执行完命令后自动关闭。同时,我们还将`RedirectStandardOutput`属性设置为`true`,这样就可以获取命令行输出并打印到控制台上。 另外,要注意的是,在执行命令时,我们使用了`process.WaitForExit()`方法来等待命令行执行完毕。这里可以根据具体情况调整等待时间,或者使用异步方式执行命令
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值