首页 > 编程语言 >C#中 ProcessStartInfo、process启动一个外部程序

C#中 ProcessStartInfo、process启动一个外部程序

时间:2024-05-13 17:21:54浏览次数:21  
标签:ProcessStartInfo 重定向 输出 C# process 进程 true

在 C# 中,ProcessStartInfo 类是 System.Diagnostics 命名空间中的一部分,它用于控制 Process 类启动新进程时的各种设置。所以在定义了一个ProcessStartInfo之后还得定义一个Process 并将前者的设置绑定给后者。

示例:

            ProcessStartInfo psi = new ProcessStartInfo
            {
                FileName = FrmNewProject.GetFolderPath() + "\\python\\dist\\Solver_test.exe",
                RedirectStandardInput = true,//将标准输入流重定向,允许程序向cmd发送命令。
                RedirectStandardOutput = true,//将标准输出流重定向,允许程序捕获cmd的输出。
                RedirectStandardError = true,//将错误输出流重定向,允许程序捕获cmd的错误信息。
                UseShellExecute = false,//禁用shell的使用,这是必需的,因为需要重定向输入/输出流。
                CreateNoWindow = true,//启动进程时不创建新窗口,使其在后台运行。
                WorkingDirectory = FrmNewProject.GetFolderPath() + "\\python\\dist" ,// 设置工作目录为exe文件的目录
                Arguments = $"\"{general_file}\" \"{topo_info}\" \"{stream_info}\" \"{result_final}\""
            };

            Process process = new Process
            {
                StartInfo = psi
            };

            process.Start();

            // 如果需要,向EXE发送输入
            // process.StandardInput.WriteLine("some input");

            //当你设置了 RedirectStandardOutput 和 RedirectStandardError,你已经告诉系统把这些输出重定向到你的应用程序控制的流中。然而,这些信息并不会自动显示在Visual Studio的输出窗口或其他地方;你需要主动从这些流中读取数据。
            string output = process.StandardOutput.ReadToEnd();//读取进程的标准输出流到结束,通常包括命令的执行结果。
            string errors = process.StandardError.ReadToEnd();//读取进程的错误输出流到结束,捕获执行过程中可能发生的错误。
            process.WaitForExit();//等待进程结束,确保所有操作完成后再继续。

            // 处理输出和错误
            Console.WriteLine(output);
            Console.Error.WriteLine(errors);

ProcessStartInfo主要属性

  • FileName:要执行的文件的名称。这通常是可执行文件的路径,但也可以是任何系统可以识别的文档或文件。
  • Arguments:与 FileName 属性一起使用的命令行参数。
  • WorkingDirectory:进程启动时的当前工作目录。默认情况下,这是当前进程的工作目录。
  • UseShellExecute:指示是否使用操作系统的 shell 来启动进程。如果 false,则直接从创建的进程中运行可执行文件;如果 true,则通过操作系统的 shell 执行。
  • CreateNoWindow:如果设置为 true,则不会为新进程创建窗口。
  • RedirectStandardOutputRedirectStandardErrorRedirectStandardInput:这些属性允许您重定向进程的输入、输出和错误流。这在需要从代码中读取或写入进程的输出时非常有用。

这里WorkingDirectory这一项在调用启动类似python或者bat这些脚本文件的时候很重要,因为脚本文件中经常会有以当前目录为工作目录选择上层或下层目录的情况。如果WorkingDirectory没有选择正确会导致这些代码执行失败。

 

重定向输出

最后将输出重定向到运行c#的输出终端时,不仅仅是往ProcessStartInfo定义里加了:

                RedirectStandardInput = true,//将标准输入流重定向,允许程序向cmd发送命令。
                RedirectStandardOutput = true,//将标准输出流重定向,允许程序捕获cmd的输出。
                RedirectStandardError = true,//将错误输出流重定向,允许程序捕获cmd的错误信息。

就可以了,因为当你设置了 RedirectStandardOutput 和 RedirectStandardError,你已经告诉系统把这些输出重定向到你的应用程序控制的流中。然而,这些信息并不会自动显示在Visual Studio的输出窗口或其他地方;你需要主动从这些流中读取数据。也就是要使用process的这两个方法:

            string output = process.StandardOutput.ReadToEnd();//读取进程的标准输出流到结束,通常包括命令的执行结果。
            string errors = process.StandardError.ReadToEnd();//读取进程的错误输出流到结束,捕获执行过程中可能发生的错误。

 

标签:ProcessStartInfo,重定向,输出,C#,process,进程,true
From: https://www.cnblogs.com/ban-boi-making-dinner/p/18189616

相关文章

  • three.weapp.js提示applyMatrix4 is not a function
    最近做项目使用three.weapp,因为是微信版的three,所以删减了好多方法。在使用applyMatrix4时报了 applyMatrix4isnotfunction的错误。解决方法简单,找thee里面有的方法代替。先console.log查看下three.weapp里面的Group prototype有什么可以看到有一个applyMatrix方法。......
  • 重大升级 | OpenSCA SaaS全面接入供应链安全情报!
    结合社区用户反馈及研发小伙伴的积极探索,OpenSCA项目组再次发力,SaaS版本重大升级啦!用户的需求是OpenSCA前进的动力,欢迎更多感兴趣的朋友们积极试用和反馈~ 更新内容  1全面接入云脉XSBOM供应链安全情报 2强大的资产全局管理页面  更新说明 1.云脉XSBO......
  • ComfyUI安装ComfyUI-Manager管理器和翻译插件
    进到ComfyUI\custom_nodes目录克隆https://github.com/ltdrdata/ComfyUI-Manager源码到ComfyUI\custom_nodes下然后进入到ComfyUI-Manager,执行pipinstall-rrequirements.txt启动\重启ComfyUI安装翻译插件点击Manager按钮搜索AIGODLIKE-COMFYUI-TRANSLATION安装......
  • 分享一个树级结构数据,自动生成各个层次节点的code代码方法,优势在于可以在获取到子级的
    publicclassOrgCodeHierarchy{privatestaticfinalintMAX_SEQUENCE=999;privatestaticfinalStringALPHABET="ABCDEFGHIJKLMNOPQRSTUVWXYZ";privatestaticMap<String,Boolean>existingOrgCodeMaps=newHashMap<>()......
  • vue中dicts怎么使用
    1.确定字典获取的接口//根据字典类型查询字典数据信息exportfunctiongetDicts(dictType){returnrequest({url:'/system/dict/data/type/'+dictType,method:'get'})}2.在公共的方法文件中提供一个方法目录在/src/utils/dict/DictData.js/***@c......
  • Windows Basics - Finding Files on Your Computer Back to Tutorial
     everything 推荐用这个工具搜索文件 FindingfilesonyourcomputerInthepreviouslesson,wetalkedabouthowfolderscanhelptokeepyourfilesorganized.However,theremaybetimeswhenyouhavetroublefindingacertainfile.Ifthishappenstoyou......
  • Windows Basics - Common Computer Tasks
    CommoncomputertasksLearninghowtouseacomputercanfeeloverwhelmingattimes.Fortunately,therearesomecommoncomputerskillsthatwillworkthesamewayinalmostanysituation.Onceyoulearnhowtousetheseskills,you'llbeabletouse......
  • Windows Basics - Adjusting Your Settings
     AdjustingyoursettingsAtsomepoint,youmaywanttoadjustyourcomputer'ssettings.Forexample,youmightwanttochangeyourdesktopbackgroundormodifyyourInternetsettings.YoucanchangethesesettingsandmorefromtheControlPanel控制......
  • 微服务Spring Cloud17_Spring Cloud Config分布式配置中心11
    一、简介在分布式系统中,由于服务数量非常多,配置文件分散在不同的微服务项目中,管理不方便。为了方便配置文件集中管理,需要分布式配置中心组件。在SpringCloud中,提供了SpringCloudConfig,它支持配置文件放在配置服务的本地,也支持放在远程Git仓库(GitHub、码云)。使用SpringCl......
  • AC/DC电源模块在电力系统中的作用与重要性
    BOSHIDAAC/DC电源模块在电力系统中的作用与重要性AC/DC电源模块是一种将交流电转换为直流电的设备,广泛应用于各种电力系统中。它的作用非常重要,可以说是电力系统中的重要组成部分。下面将从三个方面阐述AC/DC电源模块在电力系统中的作用和重要性。 首先,AC/DC电源模块在电力......