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#中Guid类使用小结

《C#中Guid类使用小结》本文主要介绍了C#中Guid类用于生成和操作128位的唯一标识符,用于数据库主键及分布式系统,支持通过NewGuid、Parse等方法生成,感兴趣的可以了解一下... 目录前言一、什么是 Guid二、生成 Guid1. 使用 Guid.NewGuid() 方法2. 从字符串创建

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

postgresql数据库基本操作及命令详解

《postgresql数据库基本操作及命令详解》本文介绍了PostgreSQL数据库的基础操作,包括连接、创建、查看数据库,表的增删改查、索引管理、备份恢复及退出命令,适用于数据库管理和开发实践,感兴... 目录1. 连接 PostgreSQL 数据库2. 创建数据库3. 查看当前数据库4. 查看所有数据库

linux重启命令有哪些? 7个实用的Linux系统重启命令汇总

《linux重启命令有哪些?7个实用的Linux系统重启命令汇总》Linux系统提供了多种重启命令,常用的包括shutdown-r、reboot、init6等,不同命令适用于不同场景,本文将详细... 在管理和维护 linux 服务器时,完成系统更新、故障排查或日常维护后,重启系统往往是必不可少的步骤。本文

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、测试数据