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

相关文章

nginx启动命令和默认配置文件的使用

《nginx启动命令和默认配置文件的使用》:本文主要介绍nginx启动命令和默认配置文件的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录常见命令nginx.conf配置文件location匹配规则图片服务器总结常见命令# 默认配置文件启动./nginx

基于Python实现一个Windows Tree命令工具

《基于Python实现一个WindowsTree命令工具》今天想要在Windows平台的CMD命令终端窗口中使用像Linux下的tree命令,打印一下目录结构层级树,然而还真有tree命令,但是发现... 目录引言实现代码使用说明可用选项示例用法功能特点添加到环境变量方法一:创建批处理文件并添加到PATH1

Windows的CMD窗口如何查看并杀死nginx进程

《Windows的CMD窗口如何查看并杀死nginx进程》:本文主要介绍Windows的CMD窗口如何查看并杀死nginx进程问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows的CMD窗口查看并杀死nginx进程开启nginx查看nginx进程停止nginx服务

C#如何去掉文件夹或文件名非法字符

《C#如何去掉文件夹或文件名非法字符》:本文主要介绍C#如何去掉文件夹或文件名非法字符的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#去掉文件夹或文件名非法字符net类库提供了非法字符的数组这里还有个小窍门总结C#去掉文件夹或文件名非法字符实现有输入字

C#之List集合去重复对象的实现方法

《C#之List集合去重复对象的实现方法》:本文主要介绍C#之List集合去重复对象的实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C# List集合去重复对象方法1、测试数据2、测试数据3、知识点补充总结C# List集合去重复对象方法1、测试数据

Linux系统中的firewall-offline-cmd详解(收藏版)

《Linux系统中的firewall-offline-cmd详解(收藏版)》firewall-offline-cmd是firewalld的一个命令行工具,专门设计用于在没有运行firewalld服务的... 目录主要用途基本语法选项1. 状态管理2. 区域管理3. 服务管理4. 端口管理5. ICMP 阻断

C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式

《C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式》Markdown凭借简洁的语法、优良的可读性,以及对版本控制系统的高度兼容性,逐渐成为最受欢迎的文档格式... 目录为什么要将文档转换为 Markdown 格式使用工具将 Word 文档转换为 Markdown(.

Java调用C#动态库的三种方法详解

《Java调用C#动态库的三种方法详解》在这个多语言编程的时代,Java和C#就像两位才华横溢的舞者,各自在不同的舞台上展现着独特的魅力,然而,当它们携手合作时,又会碰撞出怎样绚丽的火花呢?今天,我们... 目录方法1:C++/CLI搭建桥梁——Java ↔ C# 的“翻译官”步骤1:创建C#类库(.NET

Java -jar命令如何运行外部依赖JAR包

《Java-jar命令如何运行外部依赖JAR包》在Java应用部署中,java-jar命令是启动可执行JAR包的标准方式,但当应用需要依赖外部JAR文件时,直接使用java-jar会面临类加载困... 目录引言:外部依赖JAR的必要性一、问题本质:类加载机制的限制1. Java -jar的默认行为2. 类加

git stash命令基本用法详解

《gitstash命令基本用法详解》gitstash是Git中一个非常有用的命令,它可以临时保存当前工作区的修改,让你可以切换到其他分支或者处理其他任务,而不需要提交这些还未完成的修改,这篇文章主要... 目录一、基本用法1. 保存当前修改(包括暂存区和工作区的内容)2. 查看保存了哪些 stash3. 恢