求一个小程序~(c#)关于强制结束进程(强制结束多个正在运行or未响应的同名程序)

时间:2021-01-16 05:02:00
求一个小程序,

windows的任务管理器一次只能 强制结束一个程序,很麻烦,
能不能预先用一个按钮记录一个程序名,
当点击那个按钮的时候, 强制结束当时正在运行所有的同名那个程序。

假如我开了很多阅览器,手动关闭的话,窗口关掉了,但程序还没有结束(任务管理器里还有),想要一次 强制结束很多同名的程序应该怎么办?


程序要完成的任务:

比如我开了6个iexplore.exe
手动关了,
但任务管理器里还显示:
iexplore.exe
iexplore.exe
iexplore.exe
iexplore.exe
iexplore.exe
iexplore.exe
......

在程序中,我点一个记录了iexplore.exe的按钮,然后把所有名字为iexplore.exe的程序都 强制结束。


我现在也在学c#但是不知道c#怎么强制结束程序,

希望
源码+程序     
or源码
or强制结束程序用到的类和方法的用法(怎么实现,怎么调用,什么参数等等)

谢谢指点!

11 个解决方案

#1


有个kill方法吧~~~~

#2


                    For Each pTempProcess In System.Diagnostics.Process.GetProcesses()
                        Dim sProcessName As String = pTempProcess.ProcessName
                        If sProcessName = "xxoo" Then
                            Dim sProcessID As String = pTempProcess.Id.ToString()
                            Dim pProcessTemp As System.Diagnostics.Process = Process.GetProcessById(sProcessID)
                            pProcessTemp.Kill()
                            pProcessTemp.Close()
                            Exit For
                        End If
                    Next


vb的

#3


到www.codeproject.com里面找,关于进程处理方面的有很多

#4


引用 1 楼 lijing3333 的回复:
有个kill方法吧~~~~


找到了,但不会用,网上的讲解有些模糊,代码解释下就好了~

#5



Thread threadReceive;
if (threadReceive.ThreadState==ThreadState.Running)//当前状态为启动线程
            {
                threadReceive.Abort();
                this.Close();
            }
            else if (threadReceive.ThreadState == ThreadState.Suspended)//当前状态为挂起线程
            {
                threadReceive.Resume();
                threadReceive.Abort();
                this.Close();
            }
            else if (threadReceive.ThreadState == ThreadState.SuspendRequested)//当前状态为正在挂起线程
            {
                threadReceive.Resume();
                threadReceive.Abort();
                this.Close();
            }
            else if (threadReceive.ThreadState == ThreadState.Unstarted)
            {
                this.Close();
            }     

#6


引用 2 楼 going1981 的回复:
VB.NET codeForEach pTempProcessIn System.Diagnostics.Process.GetProcesses()Dim sProcessNameAsString= pTempProcess.ProcessNameIf sProcessName="xxoo"ThenDim sProcessIDAsString= pTempProcess.Id.ToString()Dim pProcessTempAs System.Diagnostics.Process= Process.GetProcessById(sProcessID)
                            pProcessTemp.Kill()
                            pProcessTemp.Close()ExitForEndIfNext

vb的



这个看得懂一部分,但是里面的一些
System.Diagnostics.Process 
Process.GetProcessById
Dim 
这些用法不懂,另外,我vb没怎么学,
c#里有没有类似的方法?c#的我想学!有的话能讲解下最好~

#7


引用 5 楼 wkd04 的回复:
C# code
Thread threadReceive;if (threadReceive.ThreadState==ThreadState.Running)//当前状态为启动线程            {
                threadReceive.Abort();this.Close();
            }elseif (threadReceive.ThreadSt?-



是不是我说的不清楚,还是我没看明白?
我是想强制结束本程序外的程序,
这个看起来像能结束程序内的线程,
如果要强制结束本程序外的程序,是不是要搜索程序外的进程?
(说白了,就像是一个任务管理器一样的程序,只不过能很方便的一下子强制结束很多个同名的正在运行的程序)

#8


楼主,这些东西C#全部都有。vb.net 和 c# 是可以互相转换的,网上N多转换工具。


 
foreach (var pTempProcess in System.Diagnostics.Process.GetProcesses()) {
         string sProcessName = pTempProcess.ProcessName; //获取进程名称
         if (sProcessName == "xxoo") { 
             string sProcessID = pTempProcess.Id.ToString(); //获取进程ID
             System.Diagnostics.Process pProcessTemp = Process.GetProcessById(sProcessID);
             pProcessTemp.Kill(); //杀死它
             pProcessTemp.Close();
          }
     }

#9


引用 8 楼 going1981 的回复:
楼主,这些东西C#全部都有。vb.net 和 c# 是可以互相转换的,网上N多转换工具。


C# codeforeach (var pTempProcessin System.Diagnostics.Process.GetProcesses()) {string sProcessName= pTempProcess.ProcessName;//获取进程名称if (sProcessName=="xxoo") {string sProcessID= pTempProcess.Id.ToString();//获取进程ID             System.Diagnostics.Process pProcessTemp= Process.GetProcessById(sProcessID);
             pProcessTemp.Kill();//杀死它             pProcessTemp.Close();
          }
     }


报错:
System.Diagnostics.Process pProcessTemp =  Process.GetProcessById(sProcessID);
错误
红色的Process
1 当前上下文中不存在名称“Process” F:\Documents and Settings\Administrator\My Documents\c#练习\kill\kill\kill\Form1.cs 27 63 kill

#10


    foreach (var pTempProcess in System.Diagnostics.Process.GetProcesses())
            {
                string sProcessName = pTempProcess.ProcessName; //获取进程名称
                if (sProcessName == "notepad.exe")
                {
                    string sProcessID = pTempProcess.Id.ToString(); //获取进程ID
                    System.Diagnostics.Process pProcessTemp = System.Diagnostics.Process.GetProcessById(sProcessID);
                    pProcessTemp.Kill(); //杀死它
                    pProcessTemp.Close();
                }
            }


这样的话:有报错:
错误 1 与“System.Diagnostics.Process.GetProcessById(int)”最匹配的重载方法具有一些无效参数 F:\Documents and Settings\Administrator\My Documents\c#练习\kill\kill\kill\Form1.cs 28 63 kill
错误 2 参数“1”: 无法从“string”转换为“int” F:\Documents and Settings\Administrator\My Documents\c#练习\kill\kill\kill\Form1.cs 28 86 kill

#11


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;

namespace kill
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            foreach (var pTempProcess in System.Diagnostics.Process.GetProcesses())
            {
                string sProcessName = pTempProcess.ProcessName; //获取进程名称
                if (sProcessName == "notepad")
                {
                    string sProcessID = pTempProcess.Id.ToString(); //获取进程ID
                    System.Diagnostics.Process pProcessTemp = System.Diagnostics.Process.GetProcessById(int.Parse (sProcessID));
                    pProcessTemp.Kill(); //杀死它
                    pProcessTemp.Close();
                }
            }
        }
    }
}


ok结贴!

#1


有个kill方法吧~~~~

#2


                    For Each pTempProcess In System.Diagnostics.Process.GetProcesses()
                        Dim sProcessName As String = pTempProcess.ProcessName
                        If sProcessName = "xxoo" Then
                            Dim sProcessID As String = pTempProcess.Id.ToString()
                            Dim pProcessTemp As System.Diagnostics.Process = Process.GetProcessById(sProcessID)
                            pProcessTemp.Kill()
                            pProcessTemp.Close()
                            Exit For
                        End If
                    Next


vb的

#3


到www.codeproject.com里面找,关于进程处理方面的有很多

#4


引用 1 楼 lijing3333 的回复:
有个kill方法吧~~~~


找到了,但不会用,网上的讲解有些模糊,代码解释下就好了~

#5



Thread threadReceive;
if (threadReceive.ThreadState==ThreadState.Running)//当前状态为启动线程
            {
                threadReceive.Abort();
                this.Close();
            }
            else if (threadReceive.ThreadState == ThreadState.Suspended)//当前状态为挂起线程
            {
                threadReceive.Resume();
                threadReceive.Abort();
                this.Close();
            }
            else if (threadReceive.ThreadState == ThreadState.SuspendRequested)//当前状态为正在挂起线程
            {
                threadReceive.Resume();
                threadReceive.Abort();
                this.Close();
            }
            else if (threadReceive.ThreadState == ThreadState.Unstarted)
            {
                this.Close();
            }     

#6


引用 2 楼 going1981 的回复:
VB.NET codeForEach pTempProcessIn System.Diagnostics.Process.GetProcesses()Dim sProcessNameAsString= pTempProcess.ProcessNameIf sProcessName="xxoo"ThenDim sProcessIDAsString= pTempProcess.Id.ToString()Dim pProcessTempAs System.Diagnostics.Process= Process.GetProcessById(sProcessID)
                            pProcessTemp.Kill()
                            pProcessTemp.Close()ExitForEndIfNext

vb的



这个看得懂一部分,但是里面的一些
System.Diagnostics.Process 
Process.GetProcessById
Dim 
这些用法不懂,另外,我vb没怎么学,
c#里有没有类似的方法?c#的我想学!有的话能讲解下最好~

#7


引用 5 楼 wkd04 的回复:
C# code
Thread threadReceive;if (threadReceive.ThreadState==ThreadState.Running)//当前状态为启动线程            {
                threadReceive.Abort();this.Close();
            }elseif (threadReceive.ThreadSt?-



是不是我说的不清楚,还是我没看明白?
我是想强制结束本程序外的程序,
这个看起来像能结束程序内的线程,
如果要强制结束本程序外的程序,是不是要搜索程序外的进程?
(说白了,就像是一个任务管理器一样的程序,只不过能很方便的一下子强制结束很多个同名的正在运行的程序)

#8


楼主,这些东西C#全部都有。vb.net 和 c# 是可以互相转换的,网上N多转换工具。


 
foreach (var pTempProcess in System.Diagnostics.Process.GetProcesses()) {
         string sProcessName = pTempProcess.ProcessName; //获取进程名称
         if (sProcessName == "xxoo") { 
             string sProcessID = pTempProcess.Id.ToString(); //获取进程ID
             System.Diagnostics.Process pProcessTemp = Process.GetProcessById(sProcessID);
             pProcessTemp.Kill(); //杀死它
             pProcessTemp.Close();
          }
     }

#9


引用 8 楼 going1981 的回复:
楼主,这些东西C#全部都有。vb.net 和 c# 是可以互相转换的,网上N多转换工具。


C# codeforeach (var pTempProcessin System.Diagnostics.Process.GetProcesses()) {string sProcessName= pTempProcess.ProcessName;//获取进程名称if (sProcessName=="xxoo") {string sProcessID= pTempProcess.Id.ToString();//获取进程ID             System.Diagnostics.Process pProcessTemp= Process.GetProcessById(sProcessID);
             pProcessTemp.Kill();//杀死它             pProcessTemp.Close();
          }
     }


报错:
System.Diagnostics.Process pProcessTemp =  Process.GetProcessById(sProcessID);
错误
红色的Process
1 当前上下文中不存在名称“Process” F:\Documents and Settings\Administrator\My Documents\c#练习\kill\kill\kill\Form1.cs 27 63 kill

#10


    foreach (var pTempProcess in System.Diagnostics.Process.GetProcesses())
            {
                string sProcessName = pTempProcess.ProcessName; //获取进程名称
                if (sProcessName == "notepad.exe")
                {
                    string sProcessID = pTempProcess.Id.ToString(); //获取进程ID
                    System.Diagnostics.Process pProcessTemp = System.Diagnostics.Process.GetProcessById(sProcessID);
                    pProcessTemp.Kill(); //杀死它
                    pProcessTemp.Close();
                }
            }


这样的话:有报错:
错误 1 与“System.Diagnostics.Process.GetProcessById(int)”最匹配的重载方法具有一些无效参数 F:\Documents and Settings\Administrator\My Documents\c#练习\kill\kill\kill\Form1.cs 28 63 kill
错误 2 参数“1”: 无法从“string”转换为“int” F:\Documents and Settings\Administrator\My Documents\c#练习\kill\kill\kill\Form1.cs 28 86 kill

#11


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;

namespace kill
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            foreach (var pTempProcess in System.Diagnostics.Process.GetProcesses())
            {
                string sProcessName = pTempProcess.ProcessName; //获取进程名称
                if (sProcessName == "notepad")
                {
                    string sProcessID = pTempProcess.Id.ToString(); //获取进程ID
                    System.Diagnostics.Process pProcessTemp = System.Diagnostics.Process.GetProcessById(int.Parse (sProcessID));
                    pProcessTemp.Kill(); //杀死它
                    pProcessTemp.Close();
                }
            }
        }
    }
}


ok结贴!