工作 · 2023年4月14日

C#操作windows系统进程的方法_C#教程

一、概述

一个Process组件提供了在计算机运行进程的访问权限。 进程,在最简单的术语中,是正在运行的应用。提供对本地和远程进程的访问权限并使你能够启动和停止本地系统进程。

属性

  • Id    获取关联进程的唯一标识符。
  • ProcessName    获取该进程的名称。
  • MachineName    获取关联进程正在其上运行的计算机的名称。
  • SessionId    获取关联进程的终端服务会话标识符。
  • StandardError    获取用于读取应用程序错误输出的流。
  • StandardInput    获取用于写入应用程序输入的流。
  • StandardOutput    获取用于读取应用程序文本输出的流。
  • StartInfo    获取或设置要传递给 Process 的 Start() 方法的属性。
  • StartTime    获取关联进程启动的时间。
  • Threads    获取在关联进程中运行的一组线程。
  • Handle    获取关联进程的本机句柄。
  • MainWindowHandle    获取关联进程主窗口的窗口句柄。
  • MainWindowTitle    获取进程的主窗口标题。   
  • MainModule    获取关联进程的主模块。
  • Modules    获取已由关联进程加载的模块。

方法

  • GetCurrentProcess()    获取新的 Process 组件并将其与当前活动的进程关联。
  • GetProcessById(Int32)    返回新的 Process 组件(给定本地计算机上某个进程的标识符)。
  • GetProcesses()    为本地计算机上的每个进程资源创建一个新的 Process 组件。
  • GetProcessesByName(String)    创建新的 Process 组件的数组,并将它们与本地计算机上共享指定的进程名称的所有进程资源关联。
  • Kill()    立即停止关联的进程。
  • Start()    启动(或重用)此 Process 组件的 StartInfo 属性指定的进程资源,并将其与该组件关联。
  • WaitForExit(Int32)         指示 Process 组件在指定的毫秒数内等待关联进程退出。

二、使用方法

1、建立和销毁进程 System.Diagnosties

System.Diagnostics.Process p=Process.Start("notepad.exe","File.txt");
Thread.Sleep(2000);
p.Kill();

2、后台运行进程:

ProcessStartInfo psi = new ProcessStartInfo("cmd.exe");
psi.Arguments = @"/c copy c:\1.txt lpt1";
psi.CreateNoWindow = true;
psi.UseShellExecute = false;//默认为true, 使用外壳程序启动进程。否则,直接从可执行文件创建进程。
Process p = Process.Start(psi);
if (!p.WaitForExit(1000 * 7))//启动外部程序,等待其退出
{
    p.Kill();
}
p.Close();

或者

ProcessStartInfo psi = new ProcessStartInfo("cmd.exe");//FileName
psi.RedirectStandardInput = true;
psi.RedirectStandardOutput = true;
psi.CreateNoWindow = true;//将此属性设置为false,就能重定向进程。。。
psi.UseShellExecute = false;//
Process p = Process.Start(psi);
StreamWriter sw = p.StandardInput;
StreamReader sr = p.StandardOutput;
sw.WriteLine(@"/c copy c:\1.txt lpt1");
sw.Close();
Console.Write(sr.ReadToEnd());
sr.Close();
p.Close();

3、启动外部程序

System.Diagnostics.Process.Start("explorer.exe", @"c:/"); //用资源管理器打开C:/  
System.Diagnostics.Process.Start("rundll32.exe", @"shell32.dll,Control_RunDLL appwiz.cpl,,0");//打开“添加或删除程序”的面板:

4、列举计算机中运行中的进程

 var pList = Process.GetProcesses().OrderBy(x => x.Id).Take(10);
foreach (var p in pList)
{
    Console.WriteLine(string.Format("ProcessID is {0} \t ProcessName is {1}", p.Id, p.ProcessName));
}

5、获取进程中的多个模块

var mList = Process.GetCurrentProcess().Modules;
foreach (ProcessModule m in mList)
{
    Console.WriteLine(string.Format("ModuleName is {0} \t ModuleURL  is {1} \t ModuleVersion is {2}", m.ModuleName, m.FileName, m.FileVersionInfo.FileVersion));
}