C#Process进程的使用,以及对ProcessInfo中所有的参数详细记录
目录
一、Process
二、ProcessInfo
2.1 FileName
2.2 Arguments
2.3 WorkingDirectory
2.4 CreateNoWindow
2.5 UseShellExecute
2.6 RedirectStandardInput
2.7 RedirectStandardOutput
2.8 RedirectStandardError
2.9 WindowStyle
2.10 Verb
2.11 LoadUserProfile
2.12 UserName
2.13 Password
2.14 Domain
2.15 ErrorDialog
2.16 ErrorDialogParentHandle
2.17 EnvironmentVariables
2.18 StandardInputEncoding
2.19 StandardOutputEncoding
2.20 StandardErrorEncoding
2.21 EnableRaisingEvents
三、获取当前进程的所有信息
四、通过Process进程,打开指定的URL
五、通过Process进程,执行一些exe后缀的文件
5.1 打开高级系统设置
5.2 打开任务管理器
5.3 打开Windows资源管理器
5.4 通过CMD命令行,ping某个IP地址
5.5 通过记事本打开某个txt文件
六、获取输出内容
6.1 输入java -version后获取输出内容
6.2 输入多条指令
一、Process
在C#中,可以使用System.Diagnostics
命名空间下的Process
类来启动、停止、监视进程。
二、ProcessInfo
2.1 FileName
- 类型:
string
- 说明: 要启动的可执行文件的名称或路径。例如:
"notepad.exe"
,或者可以指定完整路径:"C:\\Windows\\System32\\notepad.exe"
。- 备注: 如果可执行文件在
PATH
环境变量中已定义,则只需指定文件名即可;否则需要提供完整路径。
2.2 Arguments
- 类型:
string
- 说明: 启动可执行文件时要传递的命令行参数。多个参数时,用空格分隔。例如:
"-l -h"
.- 示例: 如果要打开 Notepad 并指定文件,可以使用
"notepad.exe"
作为FileName
,以及"example.txt"
作为Arguments
。
2.3 WorkingDirectory
- 类型:
string
- 说明: 设置启动进程的工作目录。如果未指定,默认使用当前目录。
- 示例:
WorkingDirectory = @"C:\MyApp"
2.4 CreateNoWindow
- 类型:
bool
- 说明: 如果为
true
,则不会为新进程创建控制台窗口。适用于后台运行的进程或服务。- 默认值:
false
- 备注: 对于需要隐藏的命令行应用或无 UI 的进程,可以将其设置为
true
。
2.5 UseShellExecute
- 类型:
bool
- 说明: 决定是否使用操作系统的 Shell 执行启动过程。如果为
true
,则使用 Shell 启动程序(可以启动任何类型的文件);如果为false
,则直接运行可执行文件。- 默认值:
true
- 备注: 如果你需要重定向标准输入、输出或错误流,必须将此属性设置为
false
。
2.6 RedirectStandardInput
- 类型:
bool
- 说明: 决定是否将新进程的标准输入流重定向到父进程,以便父进程可以写入输入数据。
- 默认值:
false
- 备注: 需将
UseShellExecute
设置为 true才能使用此属性。
2.7 RedirectStandardOutput
- 类型:
bool
- 说明: 决定是否将新进程的标准输出重定向到父进程,以便父进程可以读取输出数据。
- 默认值:
false
- 备注: 需将
UseShellExecute
设置为 true才能使用此属性。
2.8 RedirectStandardError
- 类型:
bool
- 说明: 决定是否将新进程的标准错误重定向到父进程,以便父进程可以读取错误信息。
- 默认值:
false
- 备注: 需将
UseShellExecute
设置为 true才能使用此属性。
2.9 WindowStyle
- 类型:
ProcessWindowStyle
- 说明: 指定新进程的窗口显示状态。可以选择:
Normal
:正常显示窗口。Hidden
:隐藏窗口。Minimized
:窗口最小化。Maximized
:窗口最大化。- 默认值:
Normal
- 示例:
process.StartInfo.WindowStyle = ProcessWindowStyle.Minimized;
2.10 Verb
- 类型:
string
- 说明: 指定要使用的动作(或谓词)。常见谓词有
"open"
、"print"
、"edit"
等,适用于文件类型关联操作。例如:你可以使用"print"
来打印文档,或使用"edit"
来编辑文件。- 示例:
process.StartInfo.Verb = "print";
2.11 LoadUserProfile
- 类型:
bool
- 说明: 指定是否加载用户配置文件。当
UseShellExecute
为false
时可用。如果为true
,进程将加载用户的配置文件(例如环境变量和注册表配置)。- 默认值:
false
- 备注: 该属性通常用于启动以不同用户身份运行的进程。
2.12 UserName
- 类型:
string
- 说明: 以特定用户的身份启动进程。需要同时提供
Password
。- 备注:
UseShellExecute
必须为false
。
2.13 Password
- 类型:
SecureString
- 说明: 与
UserName
配合使用,指定运行进程时的用户密码。- 备注:
UseShellExecute
必须为false
。
2.14 Domain
- 类型:
string
- 说明: 指定用于启动进程的域(如果用户属于某个域)。
- 备注: 该属性通常与
UserName
一起使用,指定进程以不同域用户身份运行。
2.15 ErrorDialog
- 类型:
bool
- 说明: 如果为
true
,当启动的进程无法启动时,会显示一个错误对话框。- 默认值:
false
2.16 ErrorDialogParentHandle
- 类型:
IntPtr
- 说明: 设置显示错误对话框时的父窗口句柄。通常和
ErrorDialog
一起使用。
2.17 EnvironmentVariables
- 类型:
StringDictionary
- 说明: 提供要传递给新进程的环境变量集合。可以向新进程传递特定的环境变量,而不是使用父进程的环境变量。
2.18 StandardInputEncoding
- 类型:
Encoding
- 说明: 设置标准输入流的编码。
- 备注:
RedirectStandardInput
必须设置为true
。
2.19 StandardOutputEncoding
- 类型:
Encoding
- 说明: 设置标准输出流的编码。
- 备注:
RedirectStandardOutput
必须设置为true
。
2.20 StandardErrorEncoding
- 类型:
Encoding
- 说明: 设置标准错误流的编码。
- 备注:
RedirectStandardError
必须设置为true
。
2.21 EnableRaisingEvents
- 类型:
bool
- 说明: 指定是否在进程退出时向父进程触发
Exited
事件。- 默认值:
false
- 备注: 设置为
true
后,可以通过订阅进程的Exited
事件来捕获进程退出。
三、获取当前进程的所有信息
示例
// See https://aka.ms/new-console-template for more information
using System.Diagnostics;// 获取当前进程的所有信息
Process currentProcess = Process.GetCurrentProcess();
// 输出当前进程的详细信息
Console.WriteLine("=== 当前进程信息 ===");
Console.WriteLine($"进程名: {currentProcess.ProcessName}");
Console.WriteLine($"进程ID: {currentProcess.Id}");
Console.WriteLine($"进程句柄: {currentProcess.Handle}");
Console.WriteLine($"启动时间: {currentProcess.StartTime}");
Console.WriteLine($"优先级: {currentProcess.BasePriority}");
Console.WriteLine($"物理内存使用量: {currentProcess.WorkingSet64 / 1024 / 1024} MB");
Console.WriteLine($"虚拟内存使用量: {currentProcess.VirtualMemorySize64 / 1024 / 1024} MB");
Console.WriteLine($"用户处理器时间: {currentProcess.UserProcessorTime}");
Console.WriteLine($"总处理器时间: {currentProcess.TotalProcessorTime}");
Console.WriteLine($"启动文件名: {currentProcess.MainModule.FileName}");
Console.WriteLine($"当前目录: {Environment.CurrentDirectory}");// 你还可以获取更多信息,例如:
// 打开的句柄数、线程数、是否响应、CPU 使用率等等。
Console.WriteLine($"线程数: {currentProcess.Threads.Count}");
Console.WriteLine($"是否响应: {currentProcess.Responding}");
Console.WriteLine($"模块数: {currentProcess.Modules.Count}");
四、通过Process进程,打开指定的URL
通过浏览器打开百度官网
// See https://aka.ms/new-console-template for more information
using System.Diagnostics;string url = @"www.baidu.com";
Process process = new Process();
process.StartInfo.FileName = url;
process.StartInfo.UseShellExecute = true;
process.Start();
process.Close();
通过浏览器打开腾讯官网
// See https://aka.ms/new-console-template for more information
using System.Diagnostics;string url = @"www.tencent.com";
Process process = new Process();
process.StartInfo.FileName = url;
process.StartInfo.UseShellExecute = true;
process.Start();
process.Close();
五、通过Process进程,执行一些exe后缀的文件
5.1 打开高级系统设置
// See https://aka.ms/new-console-template for more information
using System.Diagnostics;string exePath = @"C:\Windows\System32\SystemPropertiesAdvanced.exe";
Process process = new Process();
process.StartInfo.FileName = exePath;
process.StartInfo.UseShellExecute = true;
process.Start();
process.Close();
5.2 打开任务管理器
// See https://aka.ms/new-console-template for more information
using System.Diagnostics;string exePath = @"taskmgr.exe";
Process process = new Process();
process.StartInfo.FileName = exePath;
process.StartInfo.UseShellExecute = true;
try
{process.Start();process.Close();
}
catch (Exception ex)
{Console.WriteLine(ex.Message); ;
}
5.3 打开Windows资源管理器
// See https://aka.ms/new-console-template for more information
using System.Diagnostics;string exePath = @"explorer.exe";
Process process = new Process();
process.StartInfo.FileName = exePath;
process.StartInfo.UseShellExecute = true;
try
{process.Start();process.Close();
}
catch (Exception ex)
{Console.WriteLine(ex.Message); ;
}
5.4 通过CMD命令行,ping某个IP地址
// See https://aka.ms/new-console-template for more information
using System.Diagnostics;string exePath = @"ping.exe";
Process process = new Process();
process.StartInfo.FileName = exePath;
process.StartInfo.Arguments = "127.0.0.1";
process.StartInfo.UseShellExecute = true;
try
{process.Start();process.Close();
}
catch (Exception ex)
{Console.WriteLine(ex.Message); ;
}
5.5 通过记事本打开某个txt文件
// See https://aka.ms/new-console-template for more information
using System.Diagnostics;string exePath = @"notepad.exe";
Process process = new Process();
process.StartInfo.FileName = exePath;
process.StartInfo.Arguments = "test.txt";
process.StartInfo.UseShellExecute = true;
try
{process.Start();process.Close();
}
catch (Exception ex)
{Console.WriteLine(ex.Message); ;
}
六、获取输出内容
6.1 输入java -version后获取输出内容
前提:JDK的变量已经写入到系统的环境变量中
// See https://aka.ms/new-console-template for more information
using System.Diagnostics;ProcessStartInfo processStartInfo = new ProcessStartInfo()
{WorkingDirectory = @"C:\",FileName = "cmd.exe", // 设置要启动的程序为 cmdArguments = "/c java -version", // /k 表示执行完命令后保持 CMD 窗口打开 UseShellExecute = false, // 允许使用操作系统外壳启动进程CreateNoWindow = true, // 让 CMD 窗口可见RedirectStandardError = true, // 错误输出流RedirectStandardOutput = true, // 标准输出流
};
// 启动进程
Process process = new Process();
process.StartInfo = processStartInfo;
process.Start();
//process.WaitForExit();
string output = process.StandardError.ReadToEnd();
string error = process.StandardError.ReadToEnd();
Console.WriteLine("标准输出流");
Console.WriteLine(output);
Console.WriteLine("错误输出流");
Console.WriteLine(error);
StringReader reader = new StringReader(output);
string firstLine = reader.ReadLine();
if (firstLine.Contains("java version"))
{Console.WriteLine("java已安装");Console.WriteLine($"java的版本为:{firstLine}");
}
else
{Console.WriteLine("java未安装");
}
输出样例
6.2 输入多条指令
// See https://aka.ms/new-console-template for more information
using System.Diagnostics;ProcessStartInfo processStartInfo = new ProcessStartInfo()
{WorkingDirectory = @"C:\",FileName = "cmd.exe",RedirectStandardInput = true,RedirectStandardOutput = true,RedirectStandardError = true,UseShellExecute = false,CreateNoWindow = false,Verb = "runas"
};
// 启动进程
Process process = new Process();
process.StartInfo = processStartInfo;
process.Start();
// 获取标准输入流
using (var sw = process.StandardInput)
{if (sw.BaseStream.CanWrite){// 输入多行命令sw.WriteLine("java");sw.WriteLine("javac");sw.WriteLine("exit"); }
}
string output = process.StandardError.ReadToEnd();
string error = process.StandardError.ReadToEnd();
Console.WriteLine("标准输出流");
Console.WriteLine(output);
if (!string.IsNullOrEmpty(error))
{Console.WriteLine("错误输出流");Console.WriteLine(error);
}
样例输出
相关文章:

C#Process进程的使用,以及对ProcessInfo中所有的参数详细记录
目录 一、Process 二、ProcessInfo 2.1 FileName 2.2 Arguments 2.3 WorkingDirectory 2.4 CreateNoWindow 2.5 UseShellExecute 2.6 RedirectStandardInput 2.7 RedirectStandardOutput 2.8 RedirectStandardError 2.9 WindowStyle 2.10 Verb 2.11 LoadUserProfil…...
STM32中的RAM和ROM分别是什么
RAM(Random Access Memory,随机存取存储器)和ROM(Read-Only Memory,只读存储器)是计算机系统中的两种常见存储器类型,它们各自有不同的功能和用途。 1. RAM(内存) 定义…...

Spring--1
spring是一个轻量级的,采用IOC与AOP编程思想的java后端开发框架,简化了企业级的应用开发。 Spring体系 数据访问层,Web层,配置中心,测试区 IOC 控制反转,将创建对象的控制权交由Spring框架,需…...
【Flutter】页面布局:流式布局(Wrap、Flow)
在移动应用开发中,布局是非常重要的一部分,尤其是当我们需要处理动态或自适应的内容时。Flutter 提供了几种布局方式来帮助开发者处理复杂的 UI 场景,其中 Wrap 和 Flow 是常用的流式布局组件。它们在处理多个子组件时表现优越,尤…...
Delphi数据字典TDictionary
在 Delphi 中,创建一个数据字典通常意味着使用一种结构来存储键值对。Delphi 没有内建的字典类型,但你可以使用 TStringList 从 Classes 单元作为一个简单的键值对存储,或者你可以使用更复杂的第三方容器,如 TDictionary 从 Gener…...

VsCode 如何自定义代码片段(Code Snippet)
前言 在现代前端开发中,提高工作效率是每个开发者的追求。Visual Studio Code(Vscode)作为一款强大的代码编辑器,提供了许多让开发者高效编程的功能,其中自定义代码片段(Code Snippet)便是一个…...

Linux服务器前后端项目部署vue+springboot—搭建服务器上的运行环境(JDK、Redis、MySQL、Nginx)
Linux服务器前后端项目部署—①搭建服务器上的运行环境 一、系统参数信息和使用工具 1、服务器信息 华为云 CenteOS7.8 64 配置信息:2核4G 2、使用工具 Xshell6 二、环境安装和配置 (一)JDK的下载和安装 1、创建一个新目录或者进入目…...

随记:有关idea中jdk版本
第一个地方:这个可能就是你整个项目的jdk版本的使用,你改了这里大概率可以改了 第二个地方: 就是 有关maven项目的 pom文件 一开始我的第一地方用的是 17 但是这里用的是8 但是运行的时候还是 17 这里可能是 maven的 项目这个地方只是对…...

【算法篇】贪心类(1)(笔记)
目录 一、理论基础 1. 大纲 2. 求解步骤 二、Leetcode 题目 1. 分发饼干 2. 摆动序列 3. 最大子序和 4. 买卖股票的最佳时机 II 5. 跳跃游戏 6. 跳跃游戏 II 7. K 次取反后最大化的数组和 8. 加油站 9. 分发糖果 一、理论基础 1. 大纲 2. 求解步骤 将问题分解为…...

el-select 可搜索、多选状态遮挡住搜索框
el-select 可搜索多选状态遮挡住搜索框 最近在使用 element-ui 中 el-select组件遇到一个问题, 我们需求可以多选,也可以输入搜索, 当鼠标在边框时才是输入搜索状态,通过下面gif动图可发现鼠标经过边框时,才显示清空图…...
el-table中实现可选表格区域的鼠标事件检测
背景描述 vue3element plus想要实现el-table中特定区域内的单元格才可点击 代码实现 首先,需要给el-table绑定单元格点击事件 <el-table :data"currTableData"borderstyle"width: 100%;"height"calc(100vh - 400px)"cell-clic…...
特种作业操作登高架设作业历年真题附答案
1.直接引起坠落的客观危险因素之平均温度低于( )℃。 A.10 B.3 C.5 答案:C 2.从事脚手架支搭作业的人员必须年满( )周岁。 A.18 B.20 C.22 答案:A 3.跨越架横杆有效部分的小头直径不…...
schedule-执行周期性任务
模块介绍 该模块主要用于python的任务调度,使用简便友好的python语法定期运行python函数或者一些其他的调用对象,这个模块就类似于windows的任务计划和linux的crontab,都是用于在服务器上周期性执行某段python脚本。 相较于linux的crontab对…...
python图片文件路径排序
解决用sord 排序文件路径乱序问题: image_files 是 图片文件路径列表[pythonProject/video2img/1.jpg,pythonProject/video2img/2.jpg,.......] image_files.sort(keylambda x: int(x.split(/)[-1].split(.)[0]))...

ARTTrack6/M、ARTTrack5、ART AT7-80横向对比
在光学跟踪系统领域,ART公司凭借其先进的技术和卓越的产品性能,一直受到市场的广泛关注。ARTTrack6/M、ARTTrack5和ART AT7-80作为ART公司的三款代表性产品,各自在不同的应用场景中发挥着重要作用。本文将对这三款产品进行纵向对比࿰…...

【Vue】Vue3.0(十三)中标签属性ref(加在普通标签上、加在组件标签上)、局部样式
上篇文章: 【Vue】Vue3.0 (十二)、watchEffect 和watch的区别及使用 🏡作者主页:点击! 🤖Vue专栏:点击! ⏰️创作时间:2024年10月18日20点56分 文章目录 基本…...

Linux系统基础-文件系统
个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 Linux系统基础-文件系统 收录于专栏[Linux学习] 本专栏旨在分享学习Linux的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 1. 回顾C语言…...
机器学习和深度学习常用的工具库
一、机器学习常用库 1. Scikit-learn 简介:一个基于Python的机器学习库,专注于经典的机器学习算法。特点: 提供了多种分类、回归、聚类和降维算法。具有统一的API,便于使用。集成了数据预处理、模型选择和评估等功能。 应用&…...

【unity小技巧】Unity6 LTS版本安装和一些修改和新功能使用介绍
文章目录 前言安装新功能变化1、官方推荐使用inputsystem进行输入控制2、修复了InputSystem命名错误导致listen被遮挡的bug3、自带去除unity启动画面logo功能4、unity官方的behavior行为树插件5、linearVelocity代替过时的velocity方法待续 完结 前言 2024/10/17其实unity就已…...

5种边界填充
目录 边界填充需要知道的两个东西什么算边界边界的范围是多少举例 复制填充反射法反射101法外包装法数值填充法原图代码最终效果 边界填充需要知道的两个东西 什么算边界 顾名思义:就是图片的最外边 边界的范围是多少 根据你自己的需要而设置 举例 这里我选择…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...

【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...

LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...

Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...

wpf在image控件上快速显示内存图像
wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像(比如分辨率3000*3000的图像)的办法,尤其是想把内存中的裸数据(只有图像的数据,不包…...

【版本控制】GitHub Desktop 入门教程与开源协作全流程解析
目录 0 引言1 GitHub Desktop 入门教程1.1 安装与基础配置1.2 核心功能使用指南仓库管理日常开发流程分支管理 2 GitHub 开源协作流程详解2.1 Fork & Pull Request 模型2.2 完整协作流程步骤步骤 1: Fork(创建个人副本)步骤 2: Clone(克隆…...