侧边栏壁纸
博主头像
陌上花 博主等级

回首万事皆休

  • 累计撰写 69 篇文章
  • 累计创建 11 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

CSharp调用CMD

种向日葵的人
2024-09-09 / 0 评论 / 0 点赞 / 18 阅读 / 0 字

Why

  • 最近在做一个有关于C#的项目,有一部分就是需要调用cmd的批处理,正好不管是bat还是python都可以使用调用cmd来实现功能,所以记录一下。

How

  • 以下简单写一下如何调用bat
 private void BatExecuteTask(string scrpitPath, out string output, out string error)
 {
     //process执行bat脚本
     using var process = new Process()
     {
         StartInfo = new ProcessStartInfo()
         {
             FileName = $@"{Environment.CurrentDirectory}\{scrpitPath}",
             Arguments = scrpitPath,
             UseShellExecute = false,
             RedirectStandardOutput = true,
             RedirectStandardInput = true,
             CreateNoWindow = true,
             WindowStyle = ProcessWindowStyle.Hidden,
             RedirectStandardError = true,
             WorkingDirectory = $@"{Environment.CurrentDirectory}",
             Verb = "runas"
         },
     };

     process.Start();
     string outputData = string.Empty;
     string errorData = string.Empty;
     //此处必须采用异步读取,否则会阻塞
     process.BeginOutputReadLine();
     process.BeginErrorReadLine();
     process.OutputDataReceived += (sender, e) =>
     {
         outputData += (e.Data + Environment.NewLine);
     };
     process.ErrorDataReceived += (sender, e) =>
     {
         errorData += (e.Data + Environment.NewLine);
     };
     process.WaitForExit();
     process.Close();

     output = outputData;
     error = errorData;

     if (!string.IsNullOrWhiteSpace(output))
     {
         this.Result = output;
         return;
     }
     if (!string.IsNullOrWhiteSpace(error))
     {
         this.Result = error;
         return;
     }
 }

Tips

  • 注意在读取输出的时候一定要用异步流,反正我不使用的话有些脚本一直卡死。
0
博主关闭了所有页面的评论