首页 > 编程语言 >c# 调用exe 公共方法封装 无窗口 获取返回值

c# 调用exe 公共方法封装 无窗口 获取返回值

时间:2023-09-25 13:49:10浏览次数:41  
标签:Process exe string programe c# void process 返回值 public

调用方法如下

var exec = new ProcessCommandBase("test.exe");
            exec.AddParameter("list vms");
            var result = exec.Exec(true);

完整帮助类如下

public class ProcessCommandBase : IDisposable
    {
        //程序名
        public string programe;
        //参数
        StringBuilder parameter = new StringBuilder();
        Process process = null;

        public ProcessCommandBase(string programe)
        {
            this.programe = programe;
        }

        public ProcessCommandBase AddParameter(string para)
        {
            parameter.Append($" {para} ");

            return this;
        }

        public string Exec(bool waitForExit = false)
        {
            //var baseDir = AppDomain.CurrentDomain.BaseDirectory;
            process = new Process();
            process.StartInfo.FileName = programe;
            process.StartInfo.Arguments = parameter.ToString();
            process.StartInfo.CreateNoWindow = true;
            process.StartInfo.UseShellExecute = false;

            //重定向标准输输出、标准错误流
            process.StartInfo.RedirectStandardError = true;
            process.StartInfo.RedirectStandardOutput = true;

            process.ErrorDataReceived += Process_ErrorDataReceived;
            process.Exited += Process_Exited;
            process.OutputDataReceived += Process_OutputDataReceived;
            Trace.WriteLine($"Exe:{programe}");
            Trace.WriteLine($"Parameter:{parameter.ToString()}");
            process.Start();
            process.BeginErrorReadLine();
            //process.BeginOutputReadLine();
            if (waitForExit)
            {
                string result = process.StandardOutput.ReadToEnd();
                process.WaitForExit();

                return result;
            }

            return string.Empty;
        }

        public void Process_OutputDataReceived(object sender, DataReceivedEventArgs e)
        {
            Trace.WriteLine(e.Data ?? string.Empty);
        }

        public void Process_Exited(object sender, EventArgs e)
        {
        }

        public void Process_ErrorDataReceived(object sender, DataReceivedEventArgs e)
        {
            Trace.WriteLine(e.Data ?? string.Empty);
        }

        public void ClearParameter()
        {
            parameter.Clear();
        }

        public void Close()
        {
            process?.Close();
            process = null;
        }

        public void Kill()
        {
            process?.Kill();
            process?.Close();
            process = null;
        }

        public void Dispose()
        {
            Kill();
        }
    }

标签:Process,exe,string,programe,c#,void,process,返回值,public
From: https://www.cnblogs.com/ives/p/17727737.html

相关文章

  • VCF文件的常见FILTER汇总
    Thisfieldcontainsthename(s)ofanyfilter(s)thatthevariantfailstopass,orthevalue PASS ifthevariantpassedallfilters.IftheFILTERvalueis .,thennofilteringhasbeenappliedtotherecords.Itisextremelyimportanttoapplyappropria......
  • C#中实现校验是否包含中文与http接口地址中解析ip和端口号
    场景Winform/CSharp中实现对Http接口地址、IP地址字符串格式/合法性校验:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/129616161在上面的基础上对某http接口地址(ip加端口号,示例http://127.0.0.1:9092)进行校验是否包含中文以及解析该地址获取ip和端口号博客:h......
  • 安装cuda Toolkit
    材料准备CUDAToolkit比如,我需要CUDAToolkit11.8.0,则点击这个CUDAToolkit11.8.0点击CUDAToolkit11.8.0的链接后,需要等待一段时间,如下图的内容SelectTargetPlatform需要很长时间才加载完成建议选择runfile.本文是使用runfile下载的使用wget下载CUDAToolkitwget......
  • Promise与Action的“爱恨情仇”
    都知道Vue中,或者准确地说是vuex中,action是异步函数(表现为actions中的函数),但我们怎么知道他们已经完成了呢?用过vuex的我们可能一时间想到了【观察计算属性的改变】的方法,但这不够理想。其实我们有更好的办法:在action中返回一个promise对象!另外,调用dispatch也会返回一个promise对象......
  • 封装继承多态和instanceof
    封装一般利用私有private把属性私有,使其无法被调用,想要调用就必须使用get/set快捷键Alt+insert方法来将其使用,它可以增强我们程序的安全性,同时再set的方法中我们可以加入关于变量能否被调用的一些限制get/set输出私有变量方法继承继承是类与类之间的关系,我们可以让子类通过ex......
  • 用智慧PC破局,华为引领产业新方向
    整个PC市场仍处于低迷之中,华为是唯一亮点。近日,捷孚凯市场咨询(中国)有限公司(以下简称GFK)发布了2023年7月份笔记本零售市场报告,中国大陆笔记本电脑零售市场季度销量同比下降10%,环比下降37%。而在轻薄本电脑细分零售市场中:华为品牌份额为23.6%,同比增长1.6%,环比增长4.4%。华为......
  • C++学习后感
    1. C++中的new和delete分别用来分配和释放内存,它们与C语言中malloc()、free()最大的一个不同之处在于:用。构造函数和析构函数对于类来说是不可或缺的,所以在C++中我们非常鼓励使用new和delete。析构就是清除空间,构造就是初始化。2.对于一个存在着标准输入输出的C++控制台......
  • Anaconda-CondaError: Downloaded bytes did not match Content-Length
    遇到如下情况:CondaError:DownloadedbytesdidnotmatchContent-Length,换源!condaconfig--addchannelshttps://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/condaconfig--addchannelshttps://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/#设置搜索时显......
  • FlashDuty Changelog 2023-09-21 | 自定义字段和开发者中心
    FlashDuty:一站式告警响应平台,前往此地址免费体验!自定义字段FlashDuty已支持接入大部分常见的告警系统,我们将推送内容中的大部分信息放到了Lables进行展示。尽管如此,我们用户还是会有一些扩展或定制性的需求,比如人工标记一个故障是否为误报。因此我们提供了自定义字段功能,......
  • 用智慧PC破局,华为引领产业新方向
    整个PC市场仍处于低迷之中,华为是唯一亮点。近日,捷孚凯市场咨询(中国)有限公司(以下简称GFK)发布了2023年7月份笔记本零售市场报告,中国大陆笔记本电脑零售市场季度销量同比下降10%,环比下降37%。而在轻薄本电脑细分零售市场中:华为品牌份额为23.6%,同比增长1.6%,环比增长4.4%。......