C#操作windows系统进程的方法
作者:springsnow 发布时间:2023-06-09 05:11:45
一、概述
一个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));
}
来源:https://www.cnblogs.com/springsnow/p/11268396.html


猜你喜欢
- 前言:GraphQL既是API查询语言,也是使用当前数据执行这些查询的运行时。GraphQL让客户能够准确地要求他们所需要的东西,仅此而已,
- 实现过滤器很简单,只需要继承ZuulFilter,并实现ZuulFilter中的抽象方法。filterType():定义过滤器的类型,它有4
- 相信你也遇到过这种场景,判断二级目录属于哪个一级目录,一个员工属于哪个上级员工领导…当Mybatis遇上目录树,有哪些解决方法?一般来说,有
- 背景两张表,分别是 :sys_tbl,和 sys_field,其中:sys_tbl 是系统所有表的信息,包含两个字段 :code(表名),n
- 先上一张效果图using UnityEngine;using System.Collections;public class TestRot
- 一.起缘故事缘于一位朋友的一道题:朋友四人玩LOL游戏。第一局,分别选择位置:中单,上单,ADC,辅助;第二局新加入的伙伴要选上单,四人可选
- springboot项目启动慢的问题排查springboot项目,随着时间的推移,启动耗时逐步增加,从几分钟慢慢的达到30多分钟,有点恐怖!
- foreach拼接字符串查询无数据返回Mybatis-plus xml使用foreach遍历查询条件,填充IN函数时,查询不到数据入参 Li
- java解析json数组最简单的json数组[ { &quo
- Android 动态菜单先上效果图比较简单,主要就是属性动画的使用和坐标角度的小细节。实现实现效果: 图标按照路径一路缩放渐变过来即可。核心
- 1.线程池Executors的简单使用1)创建一个线程的线程池。 Executors.newSingleThreadExecutor();
- 目前html5发展非常迅速,很多native app都会嵌入到网页中,以此来适用多变的市场需求。但是android的webview默认支持的
- 本文实例为大家分享了java实现猜数游戏的具体代码,供大家参考,具体内容如下有开始界面,可以设置范围,设置猜的次数代码如下:public s
- 1.项目介绍这是一款基于 Java 开发的移动端安卓小游戏——大家来拼图2.项目原理把选定的一张图片
- 破解流程破解Android程序流程:反编译—>分析–>修改–>回编译–>签名,这些都是在命令行中操作,当然也有集成了
- struct OutputFilestruct OutputFile 是单个输出文件的管理器。之前在 parse_opt
- 对于简单的场景来讲,在MEF中导入依赖模块非常简单,只要用ImportAttribute标记依赖的成员,MEF模块会自动找到并创建该模块。但
- 谈到 Java 的线程池最熟悉的莫过于 ExecutorService 接口了,jdk1.5 新增的 java.util.concurren
- 作为.net程序员,我们每天都要和BCL(Base Class Linbrary)打交道。无疑,BCL做为一个年轻的框架类库,她是成功的,但
- 基于有了OO的基础后,开始认真学习设计模式!设计模式是java设计中必不可少的!Apple.javapackage strategy;/**