当前位置: 首页 > article >正文

【C#】Process、ProcessStartInfo启动外部exe

在C#中使用 ProcessProcessStartInfo 类启动外部 .exe 文件,可以按照以下步骤进行:

  1. 创建 ProcessStartInfo 实例:配置进程启动信息,包括可执行文件的路径、传递给该程序的参数等。

  2. 设置启动选项:根据需要配置 ProcessStartInfo 的属性,例如是否使用ShellExecute、是否重定向标准输入/输出流等。

  3. 启动进程:使用 Process.Start 方法并传入 ProcessStartInfo 对象来启动进程。

  4. 处理进程:可以选择等待进程结束或与进程交互(如读取输出、发送输入)。

  5. 异常处理和资源清理:确保正确处理可能出现的异常,并且在不需要时妥善释放资源。

示例代码

using System;
using System.Diagnostics;class Program
{static void Main(){// 定义要启动的应用程序路径及参数string exePath = @"C:\Path\To\YourApplication.exe"; // 替换为实际路径string arguments = "arg1 arg2"; // 如果有参数// 创建 ProcessStartInfo 实例ProcessStartInfo startInfo = new ProcessStartInfo{FileName = exePath,Arguments = arguments,UseShellExecute = false, // 设置为false以允许重定向I/O流RedirectStandardOutput = true, // 重定向输出流,如果需要读取输出RedirectStandardError = true,  // 重定向错误流,如果需要读取错误信息CreateNoWindow = true          // 不创建窗口,如果不需要显示GUI};try{using (Process process = Process.Start(startInfo)){if (process != null){// 可选:读取标准输出和错误流string output = process.StandardOutput.ReadToEnd();string errors = process.StandardError.ReadToEnd();// 等待进程退出process.WaitForExit();// 输出结果Console.WriteLine("Output: " + output);Console.WriteLine("Errors: " + errors);// 检查退出代码int exitCode = process.ExitCode;Console.WriteLine($"Process exited with code {exitCode}");}}}catch (Exception ex){// 处理可能发生的任何异常Console.WriteLine($"An error occurred: {ex.Message}");}}
}

关键点说明

  • FileName:这是想要启动的外部应用程序的路径。请确保路径是正确的。

  • Arguments:这些是要传递给应用程序的命令行参数。如果应用程序不接受参数,或者没有参数要传递,可以省略这一步。

  • UseShellExecute:当设置为 false 时,可以重定向标准输入、输出和错误流,并且不能使用某些特性如动词(verbs),比如 "runas" 来请求管理员权限。如果设置为 true,则不可以重定向这些流,但可以利用 Shell 的功能,如打开文件关联的应用程序。

  • RedirectStandardOutput/Error:当你希望捕获进程的标准输出或错误信息时,设置为 true

  • CreateNoWindow:如果你不想让启动的应用程序创建一个新的窗口,可以设置此属性为 true

  • WaitForExit():调用此方法可以让当前线程暂停直到启动的进程结束。如果你不关心进程何时结束,或者你打算异步地处理进程完成,那么你可以选择不调用这个方法。

 

注意事项

  1. 资源管理:您使用了 using 语句来确保 Process 对象被正确处置,这是非常好的实践。不过,如果进程在 WaitForInputIdle 调用期间没有进入空闲状态,using 语句会触发 Dispose 方法,这可能会导致进程被强制关闭。通常情况下,不需要使用 using 来包裹 Process.Start 的结果,除非你确定你需要在代码执行完毕后立即终止该进程。

  2. WaitForInputIdle 的使用:这个方法用于等待直到进程进入空闲状态(对于GUI应用程序而言,这意味着它已经准备好接受用户输入)。不是所有类型的应用程序都会进入空闲状态,尤其是那些没有用户界面的应用程序。如果您不确定目标进程是否会进入空闲状态,最好避免使用 WaitForInputIdle 或者提供一个合理的超时时间,以防止无限期等待。

  3. UseShellExecute 设置为 false:当设置为 false 时,不能使用某些属性如 WorkingDirectoryVerb(例如 "runas" 提升权限),同时还需要指定 RedirectStandardOutputRedirectStandardErrorRedirectStandardInput 属性,如果您计划与进程进行通信的话。

  4. 路径和参数:确保 pathfilePathName 是正确的,并且 path 指向的是有效的可执行文件。此外,如果 filePathName 包含空格,建议将其用引号括起来以避免潜在的问题。

 

 

相关文章:

【C#】Process、ProcessStartInfo启动外部exe

在C#中使用 Process 和 ProcessStartInfo 类启动外部 .exe 文件,可以按照以下步骤进行: 创建 ProcessStartInfo 实例:配置进程启动信息,包括可执行文件的路径、传递给该程序的参数等。 设置启动选项:根据需要配置 Pro…...

【实用小技巧】如何不更新application.yml而更新spring的配置

大家都知道,我们在java工程中,常常在application.yml中有各种各样的运行时的配置,一般来说都是这样的结构: a:b:c: {ENV_NAME} 这样,我们在部署应用时,就可以通过在不同的局点修改ENV_NAME的值&#xff0…...

windows linux常用基础命令

windows基础命令 cd …/ (访问D盘 直接D: 进入目录cd…\baidudu) color 2 改变颜色 dir 浏览当前目录中有什么内容 例如 dir windows可以浏览windows中有什么文件 cls 清屏 cd windows 可以跳转到c盘目录的下面 cd…/可以返回到上一级目录 ./当前目录 cd \ 直…...

openRv1126 AI算法部署实战之——TensorFlow TFLite Pytorch ONNX等模型转换实战

Conda简介 查看当前系统的环境列表 conda env list base为基础环境 py3.6-rknn-1.7.3为模型转换环境,rknn-toolkit版本V1.7.3,python版本3.6 py3.6-tensorflow-2.5.0为tensorflow模型训练环境,tensorflow版本2.5.0,python版本…...

java进阶1——JVM

java进阶——JVM 1、JVM概述 作用 Java 虚拟机就是二进制字节码的运行环境,负责装载字节码到其内部,解释/编译为对 应平台上的机器码指令行,每一条 java 指令,java 虚拟机中都有详细定义,如怎么取操 作数&#xff0c…...

基于深度学习的视觉检测小项目(十六) 用户管理界面的组态

分组和权限: 用户分为三个组,管理员、普通用户、访客。 • 管理员的权限和作业范围: 添加和删除用户、更改所有用户的信息(用户名、登录密码、所在分组等)、查看和备份以及复制数据库; • 普通用户的权限和…...

Docker使用指南(一)——镜像相关操作详解(实战案例教学,适合小白跟学)

目录 1.镜像名的组成 2.镜像操作相关命令 镜像常用命令总结: 1. docker images 2. docker rmi 3. docker pull 4. docker push 5. docker save 6. docker load 7. docker tag 8. docker build 9. docker history 10. docker inspect 11. docker prune…...

《2025,AI重塑世界进行时》

开年爆点,AI 浪潮再掀高潮 2025 年开年,AI 领域便热闹非凡,热点事件不断,让人深刻感受到这股科技浪潮正以汹涌之势奔腾而来。先是深度求索公司(DeepSeek)的 DeepSeek - R1 模型横空出世,迅速在国…...

visual studio安装

一、下载Visual Studio 访问Visual Studio官方网站。下载 Visual Studio Tools - 免费安装 Windows、Mac、Linux 在主页上找到并点击“下载 Visual Studio”按钮。 选择适合需求的版本,例如“Visual Studio Community”(免费版本)&#x…...

VSCode中使用EmmyLua插件对Unity的tolua断点调试

一.VSCode中搜索安装EmmyLua插件 二.创建和编辑launch.json文件 初始的launch.json是这样的 手动编辑加上一段内容如下图所示: 三.启动调试模式,并选择附加的进程...

Eureka 高频考点

在 Java 微服务面试中,Eureka 是高频考点之一。以下是面试官可能针对 **Eureka** 提出的技术问题及其回答方向,涵盖基础、进阶和实战场景: --- ### **一、基础问题** #### 1. **Eureka 的核心作用是什么?** - **答**:Eureka 是服务发现组件,用于微服务架构中的 **服务注…...

一、tsp学习笔记——开发环境搭建

开发环境:window11 wsl ubuntu24.04 lypwslDESKTOP-39T8VTC:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 24.04.1 LTS Release: 24.04 Codename: noble工具安装 网络相关工具 sudo apt instal…...

Shell 中的 Globbing:原理、使用方法与实现解析(中英双语)

Shell 中的 Globbing:原理、使用方法与实现解析 在 Unix Shell(如 Bash、Zsh)中,globbing 是指 文件名模式匹配(filename pattern matching),它允许用户使用特殊的通配符(wildcards…...

互联网行业常用12个数据分析指标和八大模型

本文目录 前言 一、互联网线上业务数据分析的12个指标 1. 用户数据(4个) (1) 存量(DAU/MAU) (2) 新增用户 (3) 健康程度(留存率) (4) 渠道来源 2. 用户行为数据(4个) (1) 次数/频率…...

Leetcode 3443. Maximum Manhattan Distance After K Changes

Leetcode 3443. Maximum Manhattan Distance After K Changes 1. 解题思路2. 代码实现 题目链接:3443. Maximum Manhattan Distance After K Changes 1. 解题思路 这一题思路上算是一个类似滑动窗口的思路,核心思想就是在每一步走到的位置上考虑如何通…...

使用 Ollama 在 Windows 环境部署 DeepSeek 大模型实战指南

文章目录 前言Ollama核心特性 实战步骤安装 Ollama验证安装结果部署 DeepSeek 模型拉取模型启动模型 交互体验命令行对话调用 REST API 总结个人简介 前言 近年来,大语言模型(LLM)的应用逐渐成为技术热点,而 DeepSeek 作为国产开…...

新春贺岁,共赴AGI之旅

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 往期精彩文章推荐 季姮教授独家文字版干货 | 面向知识渊博的大语言模型 关于AI TIME AI TIME源起于2019年,旨在发扬科学思辨精神,邀请各界人士对人工智能理论、算法和场景应用的本质问题…...

C_位运算符及其在单片机寄存器的操作

C语言的位运算符用于直接操作二进制位,本篇简单结束各个位运算符的作业及其在操作寄存器的应用场景。 一、位运算符的简单说明 1、按位与运算符(&) 功能:按位与运算符对两个操作数的每一位执行与操作。如果两个对应的二进制…...

Java面试题集合篇5:10道基础面试题

文章目录 前言41、多线程使用 ArrayList42、List 和 Set 区别43、HashSet 实现原理44、HashSet检查重复和保证数据不可重复45、BlockingQueue46、Map接口46.1、HashMap实现原理46.2、HashMap在JDK1.7和JDK1.8中不同点46.3、JDK1.7 VS JDK1.8 比较 47、HashMap的put方法流程48、…...

汽车加气站操作工试题及答案​

1.天然气的主要成分是( )​ A. 乙烷 B. 乙烯 C. 甲烷 D. 乙炔​ 答案:C​ 2.加气站中,用来储存天然气的设备是( )​ A. 加气机 B. 压缩机 C. 储气井 D. 脱水装置​ 答案:C​ 3.以下哪…...

Rust错误处理:从灭火器到核按钮的生存指南

开篇:错误处理的生存哲学 在Rust的平行宇宙里,错误分为两种人格: panic! → 核按钮💣(不可恢复,全系统警报)Result → 灭火器🧯(可控制,局部处理&#xff0…...

企业四要素如何用PHP进行调用

一、什么是企业四要素? 企业四要素接口是在企业三要素(企业名称、统一社会信用代码、法定代表人姓名)的基础上,增加了一个关键要素,通常是企业注册号或企业银行账户信息。这种接口主要用于更全面的企业信息验证&#x…...

【大数据技术】搭建完全分布式高可用大数据集群(Hadoop+MapReduce+Yarn)

搭建完全分布式高可用大数据集群(Hadoop+MapReduce+Yarn) jdk-8u361-linux-x64.tarhadoop-3.3.6.tar.gz注:请在阅读本篇文章前,将以上资源下载下来。 写在前面 本文主要介绍搭建完全分布式高可用集群Hadoop+MapReduce+Yarn的详细步骤。 注意: 统一约定将软件安装包存放…...

【MySQL】MySQL经典面试题深度解析

文章目录 一、MySQL与C的深度结合1.1 为什么C项目需要MySQL?1.2 典型应用场景 二、基础概念面试题精讲2.1 存储引擎对比2.2 索引原理 三、C专项面试题解析3.1 连接池实现3.2 预处理语句3.3 批量操作优化 四、高级应用面试题剖析4.1 事务隔离级别4.2 锁机制详解4.3 查…...

GitHub Copilot 越狱漏洞

研究人员发现了两种操控 GitHub 的人工智能(AI)编码助手 Copilot 的新方法,这使得人们能够绕过安全限制和订阅费用、训练恶意模型等。 第一种技巧是将聊天交互嵌入 Copilot 代码中,利用 AI 的问答能力,使其产生恶意输…...

React组件开发技巧:如何优雅地传递Props?

React组件开发技巧:如何优雅地传递Props? 一、重复Props传递的痛点二、JSX展开语法的优雅解决方案语法解析适用场景 三、使用展开语法的注意事项1. **可读性风险**2. **Props冲突问题**3. **过度使用展开语法** 四、实际项目中的最佳实践五、总结六、扩展…...

Flask+gevent 实现异步请求处理

Flaskgevent 实现异步请求处理 使用flaskgevent实现异步请求处理,首先gevent库要使用猴子布丁,使底层I/O支持异步处理。 1 使用猴子补丁 from gevent import monkey monkey.patch_all()使用猴子补丁后, 内建函数time.sleep()已经魔改成gev…...

Python利用VideoCapture和FFmpeg读取多个rtsp流性能的比较

最近一个项目,要用python读取30个海康摄像头的rtsp流,一开始直接用cv2.VideoCapture(video_path),结果运行一段时间后发现读出来的frame经常出现花屏的现象。所以通过两种方式对程序进行了修改。 1、我先是通过cap.set(cv2.CAP_PROP_BUFFERS…...

Selenium 浏览器操作与使用技巧——详细解析(Java版)

目录 一、浏览器及窗口操作 二、键盘与鼠标操作 三、勾选复选框 四、多层框架/窗口定位 五、操作下拉框 六、上传文件操作 七、处理弹窗与 alert 八、处理动态元素 九、使用 Selenium 进行网站监控 前言 Selenium 是一款非常强大的 Web 自动化测试工具,能够…...

git 项目的更新

更新项目 当自己的本地项目与 远程的github 的仓库已经建立远程连接时&#xff0c; 则直接按照下面的步骤&#xff0c; 将本地的项目代码更新到远程仓库。 # Stage the resolved file git add README.md <file1> <file2># To stage all changes: git add .# Comm…...