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);
}
样例输出