c# 执行cmd命令跳过press any key to continue

2024-02-11 22:18

本文主要是介绍c# 执行cmd命令跳过press any key to continue,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一 、场景

       在C#程序中需要调用一个exe程序(控制台应用程序),该exe程序执行到最后出现 “press any key to continue”,需按键结束。要求在C#程序中实现模拟输入,结束调用的exe程序。

二、代码实现

  1. exe程序代码:
    #include "stdafx.h"
    using namespace std;int _tmain(int argc, _TCHAR* argv[])
    {int i=3;while(i){printf("本进程执行位置%d!\n",i);Sleep(1000);i--;} system("Pause"); return 0; 
    }
  2. C#程序代码:
    public static void RunCmd(string cmd)
    {Process MyProcess = new Process();MyProcess.StartInfo.FileName = "cmd.exe";//获取或设置要传递给 Process 的 Start 方法的属性。MyProcess.StartInfo.UseShellExecute = false;//是否使用操作系统shell启动MyProcess.StartInfo.RedirectStandardInput = true;//接受来自调用程序的输入信息MyProcess.StartInfo.RedirectStandardOutput = true;//由调用程序获取输出信息MyProcess.StartInfo.RedirectStandardError = true;//重定向标准错误输出MyProcess.StartInfo.CreateNoWindow = true;//不显示程序窗口//设置参数MyProcess.StartInfo.Arguments = "/c " + cmd;  //  /c是执行完命令后关闭命令窗口 MyProcess.Start(); //若在此处获取输出信息,进程会因为需要按键而阻塞//string output = MyProcess.StandardOutput.ReadToEnd();while (!MyProcess.HasExited){MyProcess.StandardInput.WriteLine();//输入一个字符,以结束进程}//输入字符后获取输出信息string output = MyProcess.StandardOutput.ReadToEnd();Console.WriteLine(output);MyProcess.WaitForExit(); MyProcess.Close(); 
    }static void Main(string[] args)
    {string cmd = @"***\pauseTest.exe";RunCmd(cmd);Console.WriteLine("end");
    }
  3.  输出(运行程序的时候打断点才能看到):

         

三、错误代码示例:

  1. 代码 (无法模拟按键跳过pause):
    public static void RunCmd_Wrong(string cmd)
    {Process p = new Process();p.StartInfo.FileName = "cmd.exe";p.StartInfo.UseShellExecute = false;    //是否使用操作系统shell启动p.StartInfo.RedirectStandardInput = true;//接受来自调用程序的输入信息p.StartInfo.RedirectStandardOutput = true;//由调用程序获取输出信息p.StartInfo.RedirectStandardError = true;//重定向标准错误输出p.StartInfo.CreateNoWindow = true;//不显示程序窗口p.Start();//启动程序 p.StandardInput.WriteLine(cmd);    //cmd 命令并不是作为cmd.exe进程的参数输入的而是代码写入的。p.StandardInput.AutoFlush = true;p.StandardInput.WriteLine("exit");while (!p.HasExited)    //当执行到 pause 时,此处会阻塞,并不会继续往下执行了{p.StandardInput.WriteLine();//输入一个字符,以结束进程 }//获取cmd窗口的输出信息string output = p.StandardOutput.ReadToEnd();Console.WriteLine(output);p.WaitForExit();p.Close(); 
    }
  2. 区别:

  • 正确方法将cmd命令作为进程的参数,然后启动进程:

MyProcess.StartInfo.Arguments = "/c " + cmd;

  • 错误方法是先启动进程,然后将cmd命令写入:

p.Start();//启动程序 

p.StandardInput.WriteLine(cmd);

    3. 没有 Pause 情况下对比输出

  • RunCmd():

        

  • RunCmd_Wrong():

      

这篇关于c# 执行cmd命令跳过press any key to continue的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/700931

相关文章

C#使用Spire.XLS快速生成多表格Excel文件

《C#使用Spire.XLS快速生成多表格Excel文件》在日常开发中,我们经常需要将业务数据导出为结构清晰的Excel文件,本文将手把手教你使用Spire.XLS这个强大的.NET组件,只需几行C#... 目录一、Spire.XLS核心优势清单1.1 性能碾压:从3秒到0.5秒的质变1.2 批量操作的优雅

C#和Unity中的中介者模式使用方式

《C#和Unity中的中介者模式使用方式》中介者模式通过中介者封装对象交互,降低耦合度,集中控制逻辑,适用于复杂系统组件交互场景,C#中可用事件、委托或MediatR实现,提升可维护性与灵活性... 目录C#中的中介者模式详解一、中介者模式的基本概念1. 定义2. 组成要素3. 模式结构二、中介者模式的特点

C#中SortedSet的具体使用

《C#中SortedSet的具体使用》SortedSet是.NETFramework4.0引入的一个泛型集合类,它实现了一个自动排序的集合,内部使用红黑树数据结构来维护元素的有序性,下面就来介绍一下如... 目录基础概念主要特性创建和初始化基本创建方式自定义比较器基本操作添加和删除元素查询操作范围查询集合运

C# Opacity 不透明度的具体使用

《C#Opacity不透明度的具体使用》本文主要介绍了C#Opacity不透明度的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录WinFormsOpacity以下是一些使用Opacity属性的示例:设置窗体的透明度:设置按钮的透

Linux查询服务器 IP 地址的命令详解

《Linux查询服务器IP地址的命令详解》在服务器管理和网络运维中,快速准确地获取服务器的IP地址是一项基本但至关重要的技能,下面我们来看看Linux中查询服务器IP的相关命令使用吧... 目录一、hostname 命令:简单高效的 IP 查询工具命令详解实际应用技巧注意事项二、ip 命令:新一代网络配置全

C#控制台程序同步调用WebApi实现方式

《C#控制台程序同步调用WebApi实现方式》控制台程序作为Job时,需同步调用WebApi以确保获取返回结果后执行后续操作,否则会引发TaskCanceledException异常,同步处理可避免异... 目录同步调用WebApi方法Cls001类里面的写法总结控制台程序一般当作Job使用,有时候需要控制

在ASP.NET项目中如何使用C#生成二维码

《在ASP.NET项目中如何使用C#生成二维码》二维码(QRCode)已广泛应用于网址分享,支付链接等场景,本文将以ASP.NET为示例,演示如何实现输入文本/URL,生成二维码,在线显示与下载的完整... 目录创建前端页面(Index.cshtml)后端二维码生成逻辑(Index.cshtml.cs)总结

Linux grep 命令的使用指南

《Linuxgrep命令的使用指南》本文给大家介绍Linuxgrep命令的使用指南,包括基础搜索语法、实践指南,感兴趣的朋友跟随小编一起看看吧... 目录linux grep 命令全面使用指南一、基础搜索语法1. 基本文本搜索2. 多文件搜索二、常用选项详解1. 输出控制选项2. 上下文控制选项三、正则表达

C#异步编程ConfigureAwait的使用小结

《C#异步编程ConfigureAwait的使用小结》本文介绍了异步编程在GUI和服务器端应用的优势,详细的介绍了async和await的关键作用,通过实例解析了在UI线程正确使用await.Conf... 异步编程是并发的一种形式,它有两大好处:对于面向终端用户的GUI程序,提高了响应能力对于服务器端应

C#中的Drawing 类案例详解

《C#中的Drawing类案例详解》文章解析WPF与WinForms的Drawing类差异,涵盖命名空间、继承链、常用类及应用场景,通过案例展示如何创建带阴影圆角矩形按钮,强调WPF的轻量、可动画特... 目录一、Drawing 是什么?二、典型用法三、案例:画一个“带阴影的圆角矩形按钮”四、WinForm