C#执行cmd.exe 不能关闭问题

C# 运行cmd.exe执行ffmpeg进行视频转码,程序无法关闭 ffmpeg视频转码,转码完成后程序一直卡死且一直未收到exit消息,原因是ffmpeg是StandardError流,要读取StandardError而不是StandardOutput。 public static void runCmdTranscoding() { DateTime start = DateTime.Now; try ... 阅读详情

        目前做的项目中有一个功能是管理员能够手动的备份数据库(sqlserver 2012)。第一种方法便是用sqlserver的 backup 命令来实现。在这里就需要用csharp调用命令行来实现。在网上看到的方法全都是这种(用cmd工具来执行命令)

 /// <summary>
    /// 运行CMD命令
    /// </summary>
    /// <param name="cmd">命令</param>
    /// <param name="showWindow">是否显示执行窗体</param>
    /// <returns></returns>
    public static string ExecuteCmd(string[] cmd, bool showWindow)
    {
      Process p = new Process();
      p.StartInfo.FileName = "cmd.exe";
      //关闭shell的使用
      p.StartInfo.UseShellExecute = false;
      //重定向标准输入
      p.StartInfo.RedirectStandardInput = true;
      //重定向标准输出
      p.StartInfo.RedirectStandardOutput = true;
      //重定向标准错误
      p.StartInfo.RedirectStandardError = true;
      //是否显示窗体
      p.StartInfo.CreateNoWindow = !showWindow;
      p.Start();
      
      p.StandardInput.AutoFlush = true;
      for (int i = 0; i < cmd.Length; i++)
      {
        p.StandardInput.WriteLine(cmd[i].ToString());
      }
      p.StandardInput.WriteLine("exit");
      string strRst = p.StandardOutput.ReadToEnd();
      p.WaitForExit();
      p.Close();
      p.Dispose();
      return strRst;
    }

我觉得上面这种有个不好之处  当所执行的命名(程序)不是执行完就关闭(如 ftp osql 等命令)的时候就会出现cmd这个进程无法关闭导致程序卡死。

于是还不如直接执行该执行的程序(ftp.exe  osql.exe )下面是我的方法

<span style="white-space:pre">	</span>/// <summary>
       /// 通过命令行方式执行 程序
       /// </summary>
       /// <param name="app">程序名</param>
       /// <param name="argments">程序参数</param>
       /// <param name="cmd">进入程序后的命令</param>
       /// <param name="showWindow">是否显示窗口</param>
       /// <returns>命令行执行完后内容</returns>
        public static string ExecuteCmd(string app,string argments,string[] cmd, bool showWindow)
        {
            Process p = new Process();
            p.StartInfo.FileName = app;
            p.StartInfo.Arguments = argments;
            //关闭shell的使用
            p.StartInfo.UseShellExecute = false;
            //重定向标准输入
            p.StartInfo.RedirectStandardInput = true;
            //重定向标准输出
            p.StartInfo.RedirectStandardOutput = true;
            //重定向标准错误
            p.StartInfo.RedirectStandardError = true;
            //是否显示窗体
            p.StartInfo.CreateNoWindow = !showWindow;
            p.Start();
            p.StandardInput.AutoFlush = true;
            for (int i = 0; i < cmd.Length; i++)
            {
                p.StandardInput.WriteLine(cmd[i].ToString());
            }
            string strRst = p.StandardOutput.ReadToEnd();
            p.WaitForExit();
            p.Close();
            p.Dispose();
            return strRst;
        }


 
C#调用cmd执行ftp命令 1、C#执行cmd命令   public string ExeCommand()         {             Process p = new Process();   //实例一个Process类,启动一个独立进程             p.StartInfo.FileName = "cmd.exe";             p.StartInfo.UseShel 阅读详情

相关推荐

【C#】如何在窗体程序中调用多行CMD命令

用VS写一个C#窗体程序,第一步需要用CMD启动一个外部服务并发送信息给该服务器,涉及两步命令,第一步是启动服务,第二步是发送信息。假设我在程序的当前目录下放了一个piping-server.exe服务。用如下代码可以启动此服务并传递消息。

每日出拳老爷子的博客 1079

C#强制杀进程

通过cmd命令实现 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Diagnostics; namespace runBat { class Program { static void Main(string[] args) {

Kelvin_Yan的专栏 1747

C#调用CMD命令行实现异步交互执行

在现代软件开发中,C# 作为 .NET 平台上的主流编程语言,广泛应用于系统管理、自动化脚本开发、运维工具构建等领域。通过 C# 调用 Windows 命令行(CMD),开发者可以无缝集成系统级命令,实现对操作系统的高效控制。本章将从技术背景入手,分析为何选择 C# 作为调用 CMD 命令的开发语言,探讨其在自动化运维、服务程序开发、部署脚本编写等场景中的实际应用价值。同时,我们还将介绍 .NET 框架中用于进程控制的核心类 ——Process和。

weixin_33750664的博客 1524

C#使用Process操作CMD,process.StandardOutput.ReadToEnd阻塞/假死/获取不到信息/无法关闭CMD真正原因及解决方案!!

网上看了很多解决方案 有的说在最后一条命令执行"exit", 有的说重定向标准错误输出要设置成false(process.StartInfo.RedirectStandardError = false;) 有的说命令执行完要获取输出信息,否则会一直等待↓↓↓↓↓ output = process.StandardOutput.ReadToEnd(); 和errOutput = pro...

PLA12147111的博客 1万+

C#操作cmd,启动命令行窗口

C#启动cmd命令行窗口,动态执行命令。

C#隐式运行CMD命令行窗口的方法

详细描述C#开发时,对于CMD命令调用的过程和方法。用于程序开发

C#异步调用Process()后台静默调用cmd控制台且中途不退出指令环境(实现C#调用Vivado的tcl控制台,执行tcl指令)

C#调用cmd控制台操作,网上有太多的教程了,但是大多数都是执行完一条指令,退出Process,下次执行指令,再次new Process(),(只为了接收到cmd指令的回复,不然会进程阻塞,程序至此不会再跑。)这种情形如果是执行bat文件,或者执行类似ping这种对执行下条指令没有运行环境要求的指令,影响不大。 同步调用: 参考例子: https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.process?re...

王小波门下走狗 8808

基于Python的微信聊天记录分析——数据获取

本篇为“基于Python的微信聊天记录分析”第一篇,主要涉及数据获取,包括Python环境配置、WeChatMsg项目配置和运行、获取聊天记录等内容,流程简单、比较基础,后续这个系列会涉及基于Python的数据处理、统计分析、NLP技术等内容。希望和大家多多交流,共同进步!

Henryli1202的博客 1万+

C#程序调用cmd.exe执行命令

转:https://www.cnblogs.com/njl041x/p/3881550.html 代码部分 usingSystem.Diagnostics; publicclassCmdHelper { privatestaticstringCmdPath = @"C:\Windows\System32\cmd.e...

4530

金蝶云ERP远程办公指南:零公网IP实现安全内网穿透访问

本文详细介绍了如何利用内网穿透技术,在无需公网IP和复杂路由器设置的情况下,安全远程访问内网部署的金蝶云ERP系统。通过使用cpolar工具,逐步指导用户创建加密隧道、配置固定域名,并实现管理中心与数据中心的远程登录,有效解决了企业员工在外出或居家办公时的核心业务系统访问难题。

weixin_29229261的博客 269

通过Jlink和PyLink读取蓝牙mac地址--Nordic&silicon labs

本文介绍在不开机的情况下读取蓝牙的mac地址,这里介绍两个平台,Nordic和Silicon Labs。 1. 通过Jlink Commander工具连接上目标板 选择当前芯片的型号 2. 使用mem命令查看mac地址 首先需要知道mac地址存储在芯片的哪个地址。 Nordic: 寄存器DEVICEADDRTYPE的第一个bit代表mac地址的类型,这里为1。DEVICEADDR[0]和DEVICEADDR[1]的低16bit代表了MAC地址,其中DEVICEADDR[1]的第15位应该或上DE

ching的专栏 1650

C#完整调用cmd命令,在不重启cmd进程的情况下连续执行cmd命令,并获得执行结果,全后台执行不弹黑框。

由于需求所迫,网上现有资料中都无法找到C#完整连续调用cmd命令的资料。于是自己研究了一番,现有资料都说C#调用cmd命令时必须要加“exit”或者把cmd进程Close后才会有运行结果,其实不然。之所以要等进程结束才会有结果,是因为cmd在输出结束后会等待下一次输入,从而造成线程阻塞,就相当于C#控制台的Console.ReadLine()会造成线程阻塞一样。 既然需要等待输入会造成线程阻塞,...

chunTF的博客 7364

【MFRC522】STM32与MFRC522的SPI通信优化及常见问题解析

本文深入解析了STM32与MFRC522进行SPI通信的优化方法与常见问题。从基础的硬件连接到SPI时序优化,再到关键的寄存器配置(如RFCfgReg设为0x4F以提升读卡稳定性),文章提供了详细的调试技巧和实战排坑指南,帮助开发者实现稳定高效的IC读卡应用。

yhn45678901的博客 841

C#执行CMD命令并返回结果

转载:http://iusers.com.cn/post/C-command-and-return-to-the-implementation-of-the-results-CMD 公司要求写一个用cmd的ftp命令上传文件的,写到一半发现一个问题,cmd的ftp命令的密码必须在界面里面输入,不能在程序里面控制。现在需要换成用协议上传的。把代码共享。关闭进程是网上找的。运行了cmd

郑长风 3758

美团外卖 mtgsig 1.2 逆向工程与补环境实战指南

本文深入解析了美团外卖核心风控参数mtgsig 1.2的生成机制与逆向实战。通过拆解其复杂的JSON结构,揭示了设备指纹、环境信息加密等关键字段。重点阐述了在Node.js中模拟浏览器环境(补环境)的核心方法,包括DOM/BOM对象、本地存储及Canvas/WebGL等高级指纹的模拟技巧,为安全研究和合规自动化测试提供了一套完整的技术指南。

uber9的博客 410

Win10 + Linux 双系统删除(Linux)

删除Linux所使用的磁盘分区 进入此电脑->计算机->管理->磁盘管理

weixin_52247624的博客 944

在进程中执行cmd.exe指令关闭其它进程的方式[c#]

关闭其它进程

shigzhu的专栏 540

ArcGIS笔记13_利用ArcGIS制作岸线与水深地形数据?建立水动力模型之前的数据收集与处理?

在利用MIKE建立水动力模型之前,需要收集、处理和制作诸多数据和资料,主要有岸线数据、水深地形数据、开边界潮位驱动数据、风场数据、潮位和海流观测资料和站点潮汐调和常数资料等。本篇主要介绍这些资料的获取与处理。

晏长街的博客 5948

C#执行cmd

C#执行cmd

刘凤飞 2663

【原理图PCB专题】Cadence 17.4版本原理图及PCB 模块复用

在我们设计复杂板卡的时候,往往会遇到一部分电路被反复使用的情况。Cadence允许设计者一开始就将复用模块设计好,以后只要直接调用复用模块就可以直接用以设计更复杂的电路板了。这对于大规模集成设计无疑是非常好的选择,它不仅让设计者不必花费时间在相同模块反复设计上,更有利于电路的模块化设计。

一点硬件 2017

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

c#关闭系统进程以及如何调用cmd并执行命令

使用了两种方法,一种是调用cmd执行强制关闭命令,另一种是通过C#提供的方法进行关闭  第一种  string ProcessName="explorer";//这里换成你需要删除的进程名称    Process[] MyProcess1=Process.GetProcessesByName(ProcessName);  Process MyProcess=new Process();  //设定

Annie_Cai的专栏 1068

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

C#使用cmd执行.exe文件,并在程序关闭时关闭打开的进程

本来是参考网上的来自酷小孩的一段代码(博主吐槽非常正确),如下: string str = Console.ReadLine(); System.Diagnostics.Process p = new System.Diagnostics.Process(); p.StartInfo.FileName = "cmd.exe"; p.St...

Micusd的博客 8480

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

C#关闭和启动Explorer.exe

C#关闭和启动explorer.exe程序

weixin_43152819的博客 1292

C#调用python代码

C#调用python代码一、通过cmd的方式调用出现的问题C#执行cmd.exe 不能关闭问题Python之一行代码解决这个错误:OSError: [WinError 10048] 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。二、简单的方法1.C# 调用python 一、通过cmd的方式调用 出现的问题 C#执行cmd.exe 不能关闭问题 C#执行cmd.exe 不能关闭问题 这个链接中说明了这个问题:当所执行的命名(程序)不是执行完就关闭(如 ftp osql 等命令)的时候就会出现cmd

sinat_37281674的博客 2837
下一篇: 关于火狐浏览器和IE浏览器 的<td></td>不能被撑满的经验
tearsknow
博客等级 码龄14年 8粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值