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

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",          // 设置要启动的程序为 cmd
    Arguments = "/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.kler.cn/news/354222.html

相关文章:

  • java中,深克隆和浅克隆怎么用,有什么应用场景?-----面试题分享
  • 对比长安链、FISCO BCOS、蚂蚁链
  • [实时计算flink]作业开发上线流程及规范
  • LabVIEW离心泵振动监控与诊断系统
  • 数字后端零基础入门系列 | Innovus零基础LAB学习Day2
  • 【数据分析】数据分析的流程是怎么样的?
  • R3:LSTM-火灾温度预测
  • python 爬虫 入门 二、数据解析(正则、bs4、xpath)
  • redis--Mysql和redis数据一致性问题(延时双删)
  • OpenAI的新功能Canvas,效果还不错
  • Failed to connect to github.com port 443
  • 安全风险评估(Security Risk Assessment, SRA)
  • sql的使用
  • 蛋白质残基的距离计算以及径向基函数变换中的维度变化
  • 第21~22周Java主流框架入门-Spring 2.SpringAOP面向切面编程
  • 潜水定位通信系统的功能和使用方法_鼎跃安全
  • SpringBoot+Vue+Uniapp智能社区服务小程序系统(源码+lw+部署文档+讲解等)
  • 前缀和--一维和二维模板
  • 【MySQL】索引的机制、使用
  • 机器学习—特性缩放