Net Core教程

C#调用外部程序

本文主要是介绍C#调用外部程序,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1、C#调用外部程序

在C#中,通过Process类来进行进程操作。 Process类在System.Diagnostics包中,具体使用如下所示:

 Process.Start(processName)

对于比较复杂的调用,例如给被调用程序传入参数,以及从被调用程序获取数据,此时需要设定ProcessStartInfo参数,具体设定如下所示:

  static void Main(string[] args)
        {
            try
            {
                var process = new Process()
                {
                    StartInfo = new ProcessStartInfo()
                    {
                        // 启动程序名称
                        FileName = "Hk.Console.Callee.exe",
                        // 对启动程序所传递的参数。如果参数包含空格则使用"\"\""取消空格转义
                        Arguments = "123 \"C:\\Program Files (x86)\\JetBrains\\ETW Host\"",
                        // 是否展示被调用程序
                        CreateNoWindow = false,
                        // 是否需要系统shell调用程序
                        UseShellExecute = false,
                        // 打开文本输出
                        RedirectStandardOutput = true,
                        // 打开错误输出
                        RedirectStandardError = true,
                    }
                };
                // 程序输出回调
                process.OutputDataReceived += Process_OutputDataReceived;
                process.ErrorDataReceived  += Process_ErrorDataReceived;
​
                //启动程序
                process.Start();
​
                // 启动文本输出
                process.BeginOutputReadLine();
​
                // 启动错误输出
                process.BeginErrorReadLine();
                System.Console.WriteLine("被调用程序启动成功");
​
                // 等待程序结束
                process.WaitForExit();
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e);
            }
            finally
            {
                System.Console.WriteLine("被调用程序运行结束");
                System.Console.ReadKey();
            }
        }
        /// <summary>
        /// 通过System.Console.WriteLine输出的信息回调
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private static void Process_OutputDataReceived(object sender, DataReceivedEventArgs e)
        {
            System.Console.WriteLine($"被调用程序OutputDataReceived:{e.Data}");
        }
        /// <summary>
        /// 通过System.Console.Error.WriteLine输出的信息回调
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private static void Process_ErrorDataReceived(object sender, DataReceivedEventArgs e)
        {
            System.Console.WriteLine($"被调用程序ErrorDataReceived:{e.Data}");
        }

2、测试程序

被调用程序的测试如下所示:

 static void Main(string[] args)
        {
            if (args?.Length > 0)
            {
                foreach (var param in args)
                {
                    System.Console.WriteLine($"被调用程序输入参数:{param}");
                }
            }
            else
            {
                System.Console.Error.WriteLine($"被调用程序输入参数为空");
            }
​
        }

当程序不传入参数时,此时调用程序输出信息如下:

被调用程序启动成功
被调用程序ErrorDataReceived:被调用程序输入参数为空
被调用程序运行结束

当程序传入如上所示参数时,此时调用程序输出信息如下:

被调用程序启动成功
被调用程序OutputDataReceived:被调用程序输入参数:123
被调用程序OutputDataReceived:被调用程序输入参数:C:\Program Files (x86)\JetBrains\ETW Host
被调用程序运行结束
这篇关于C#调用外部程序的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!