C#实现启动,关闭与查找进程的方法
作者:Jimmy.Yang 时间:2023-01-12 23:27:35
本文实例讲述了C#实现启动,关闭与查找进程的方法。分享给大家供大家参考,具体如下:
运行效果截图如下:
查找/列出进程很容易,但干掉进程得借助系统命令ntsd.exe,详细用法见下面的代码 :
using System;
using System.Diagnostics;
using System.Windows.Forms;
namespace ProcessDemo
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
this.linkLabel1.Links.Add(0, linkLabel1.Text.Length, "https://www.jb51.net/");
}
private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
this.linkLabel1.Links[linkLabel1.Links.IndexOf(e.Link)].Visited = true;
string target = e.Link.LinkData as string;
if (target != null && target.StartsWith("http://"))
{
Process.Start(target);
}
}
/// <summary>
/// 列出所有可访问进程
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnList_Click(object sender, EventArgs e)
{
Process[] processes;
processes = Process.GetProcesses();
string str = "";
foreach (Process p in processes)
{
try
{
str = p.ProcessName;
this.lst1.Items.Add("名称:" + p.ProcessName + ",启动时间:" + p.StartTime.ToShortTimeString() + ",进程ID:" + p.Id.ToString() );
}
catch (Exception ex)
{
this.lst1.Items.Add(ex.Message.ToString());//某些系统进程禁止访问,所以要加异常处理
}
}
}
private void btnFind_Click(object sender, EventArgs e)
{
txtFind.Text = txtFind.Text.Trim().ToLower();
if (txtFind.Text.Length > 0)
{
Process[] arrP = Process.GetProcesses();
foreach (Process p in arrP)
{
try
{
if (p.ProcessName.ToLower() == txtFind.Text)
{
MessageBox.Show(txtFind.Text + " 找到了,PID为 " + p.Id.ToString());
return;
}
}
catch { }
}
MessageBox.Show("未找到该进程,请检查输入!");
}
}
private void btnKill_Click(object sender, EventArgs e)
{
txtFind.Text = txtFind.Text.Trim().ToLower();
int pid = -1;
if (txtFind.Text.Length > 0)
{
Process[] arrP = Process.GetProcesses();
foreach (Process p in arrP)
{
try
{
if (p.ProcessName.ToLower() == txtFind.Text)
{
pid = p.Id;
break;
}
}
catch { }
}
if (pid != -1)
{
RunCmd("ntsd -c q -p " + pid);
}
}
}
/// <summary>
/// 运行DOS命令
/// DOS关闭进程命令(ntsd -c q -p PID )PID为进程的ID
/// </summary>
/// <param name="command"></param>
/// <returns></returns>
public string RunCmd(string command)
{
Process p = new Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.Arguments = "/c " + command;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = true;
p.Start();
return p.StandardOutput.ReadToEnd();
}
}
}
另外ntsd.exe在windows vista以上的版本(包括windows 2008)上,出于安全考虑已经被MS给去掉了,但我们可以直接从xp下复制过来继续使用,这里为方便大家给出ntsd.exe的下载。
希望本文所述对大家C#程序设计有所帮助。
标签:C#,进程
0
投稿
猜你喜欢
C# 鼠标穿透窗体功能的实现方法
2021-09-26 04:24:38
java selenium Selenium IDE介绍及用法
2023-11-21 06:41:22
C#实现排列组合算法完整实例
2023-04-16 09:36:59
IDEA启动tomcat控制台中文乱码问题的解决方法(100%有效)
2021-06-25 10:45:23
Java应用多机器部署解决大量定时任务问题
2023-10-28 17:07:17
Mybatis 逆向工程的三种方法详解
2023-08-10 22:27:20
Java synchronized轻量级锁实现过程浅析
2022-05-08 07:28:55
Mybatis注解增删改查的实例代码
2022-03-31 01:26:15
自定义滑动按钮为例图文剖析Android自定义View绘制
2023-06-05 01:34:34
Android开发实现的IntentUtil跳转多功能工具类【包含视频、音频、图片、摄像头等操作功能】
2023-05-27 23:58:01
C#文件流读写和进度回调示例详解
2022-08-12 14:52:31
C#如何操作Excel数据透视表
2021-09-01 20:18:42
Android 中糟糕的AsyncTask
2022-07-09 00:43:35
Java中BufferedReader与BufferedWriter类的使用示例
2022-10-30 01:00:04
Spring动态配置计时器触发时间的实例代码
2023-01-20 07:30:01
Spring-AOP @AspectJ进阶之如何绑定代理对象
2022-05-31 16:08:38
zookeeper watch机制的理解
2021-11-08 11:36:36
C#表达式树讲解
2023-02-23 19:22:52
Mybatis返回插入的主键问题解决方案
2023-05-06 02:58:03
浅谈C#单例模式的实现和性能对比
2022-10-29 10:46:30