ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C#调用外部程序

2022-06-19 15:02:08  阅读:156  来源: 互联网

标签:Process 调用 Console C# 程序 System 外部 WriteLine


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
被调用程序运行结束
 

标签:Process,调用,Console,C#,程序,System,外部,WriteLine
来源: https://www.cnblogs.com/dongweian/p/16390492.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有