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

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);
}

样例输出

http://www.lryc.cn/news/465239.html

相关文章:

  • STM32中的RAM和ROM分别是什么
  • Spring--1
  • 【Flutter】页面布局:流式布局(Wrap、Flow)
  • Delphi数据字典TDictionary
  • VsCode 如何自定义代码片段(Code Snippet)
  • Linux服务器前后端项目部署vue+springboot—搭建服务器上的运行环境(JDK、Redis、MySQL、Nginx)
  • 随记:有关idea中jdk版本
  • 【算法篇】贪心类(1)(笔记)
  • el-select 可搜索、多选状态遮挡住搜索框
  • el-table中实现可选表格区域的鼠标事件检测
  • 特种作业操作登高架设作业历年真题附答案
  • schedule-执行周期性任务
  • python图片文件路径排序
  • ARTTrack6/M、ARTTrack5、ART AT7-80横向对比
  • 【Vue】Vue3.0(十三)中标签属性ref(加在普通标签上、加在组件标签上)、局部样式
  • Linux系统基础-文件系统
  • 机器学习和深度学习常用的工具库
  • 【unity小技巧】Unity6 LTS版本安装和一些修改和新功能使用介绍
  • 5种边界填充
  • 鸿蒙网络编程系列7-TLS安全数据传输单向认证示例
  • LangGraph 源码分析 | BaseTool 模板类
  • vulnhub靶场之JOY
  • intel和AMD突然联姻,这操作给我看傻了
  • yolo_face_pose-DataBall 人脸关键点数据集 >> DataBall
  • Unity 山水树木
  • Redis 性能优化选择:Pika 的配置与使用详解
  • 【某农业大学计算机网络实验报告】实验三 IP数据报发送和转发流程
  • Android13 添加运行时权限
  • 官方操刀占用仅6G,Win 11 LTSC详细安装、优化教程来了
  • 【论文精读】RELIEF: Reinforcement Learning Empowered Graph Feature Prompt Tuning