当前位置:编程学习 > C#/ASP.NET >>

C#如何结束任务管理器中的应用程序?

C#如何通过任务管理器中的结束任务,而不是结束进程,来实现关闭应用程序的目的。。。

 因为我结束进程后程序就死在那里卡住了,但结束任务的时候程序就完好地退出了,没有出现异常。。。

所以我想通过C# 结束任务 来关闭应用程序!!! --------------------编程问答-------------------- 多占沙发 --------------------编程问答-------------------- @_@ ... --------------------编程问答-------------------- Process.kill --------------------编程问答-------------------- Environment.Exit(-1); --------------------编程问答-------------------- Application.Exit() --------------------编程问答-------------------- 关注 --------------------编程问答-------------------- Application.Exit() --------------------编程问答-------------------- Environment.Exit(-1); --------------------编程问答-------------------- 是自己的进程,还是别的进程?没有讲清楚。应该是其它进程吧? --------------------编程问答-------------------- 结束别的进程。。

 比如我现在运行了迅雷程序,我想写一个小程序来关闭迅雷这个程序,

 主要是通过任务管理器的应用程序栏来结束“迅雷”任务,而不是通过进程栏来结束“Thunder.exe”进程 --------------------编程问答-------------------- 结束别的进程。。

 比如我现在运行了迅雷程序,我想写一个小程序来关闭迅雷这个程序,

 主要是通过任务管理器的应用程序栏来结束“迅雷”任务,而不是通过进程栏来结束“Thunder.exe”进程 --------------------编程问答-------------------- 试试向迅雷主窗口SendMessage WM_CLOSE. 或 PostMessage,WM_QUIT. 你又不想用TerminateProcess..微软是不推荐用PostMessage WM_QUIT.不过。可以试下。 --------------------编程问答-------------------- 不错看看 --------------------编程问答-------------------- 使用Process类的close方法关闭winrar.exe进程,任务管理器中仍然存在该进程,且占有资源.多次使用Process启动winrar进程,仍后close,会发现任务管理器出现很多的winrar.exe进程,不知有什么办法解决?跟LZ的遇到问题一样 --------------------编程问答-------------------- Process.kill
那你可以做一个任务管理器,然后显示所有的任务,然后选择一个,用kill杀掉 --------------------编程问答--------------------
        private void button1_Click(object sender, EventArgs e)
        {
            System.Diagnostics.Process[] ps = System.Diagnostics.Process.GetProcesses() as ;
            foreach (System.Diagnostics.Process p in ps)
            {
                if (p.ProcessName == "taskmgr")
                {
                    p.Kill();
                    return;
                }
            }
        }
--------------------编程问答-------------------- System.Diagnostics.Process[] myPs;
            myPs = System.Diagnostics.Process.GetProcesses();

            foreach (System.Diagnostics.Process p in myPs)
            {
                if (p.ProcessName == "EXCEL")
                {
                    try
                    {
                        p.Kill();
                    }
                    catch (Exception eKillProcess)
                    {

                    }
                }

            } --------------------编程问答-------------------- 楼主,我也碰到这种问题,想“结束任务”,现在又没解决这个问题哈,请赐教哈。 --------------------编程问答--------------------
引用 12 楼 haiwangstar 的回复:
试试向迅雷主窗口SendMessage WM_CLOSE. 或 PostMessage,WM_QUIT. 你又不想用TerminateProcess..微软是不推荐用PostMessage WM_QUIT.不过。可以试下。


方法太多了。发送消息比较斯文了,粗暴一点用TerminateProcess,呵呵 --------------------编程问答-------------------- 枚举窗体

myAl = new ArrayList();
Process[] ps = Process.GetProcesses();
foreach (Process p in ps)
{
if(p.MainWindowTitle!="")
{
listBox1.Items.Add(p.MainWindowTitle);
myAl.Add(p.Id);
}
}

关闭窗体

int index=listBox1.SelectedIndex;
listBox1.Items.RemoveAt(index);
int count =0;
System.Collections.IEnumerator myEnumerator = myAl.GetEnumerator();
while ( myEnumerator.MoveNext() )
{
if ( count == index )
{
id = (int)myEnumerator.Current;
break;
}
count++;
Process p = Process.GetProcessById(id);
p.Kill();
myAl.RemoveAt(count);
}
--------------------编程问答--------------------
        private void button2_Click(object sender, EventArgs e)
        {
            System.Diagnostics.Process[] process = System.Diagnostics.Process.GetProcessesByName("名称");
            foreach (System.Diagnostics.Process p in process)
            {
                p.Kill();
            } --------------------编程问答--------------------
private void KillProcess(string processName) 
         {   
          //获得进程对象,以用来操作 
            System.Diagnostics.Process myproc = new System.Diagnostics.Process(); 
          //得到所有打开的进程 
           try 
          { 
          //获得需要杀死的进程名 
           foreach (Process thisproc in Process.GetProcessesByName(processName)) 
           { 
          //立即杀死进程 
             thisproc.Kill(); 
             } 
        } 
         catch (Exception Exc) 
          { 
          throw new Exception("", Exc); 
          } 
          } 
 

--------------------编程问答-------------------- private void frmFileDisposal_Closed(object sender, System.EventArgs e)
     {         
         System.Environment.Exit(System.Environment.ExitCode);   
         this.Dispose();
         this.Close();
     }
还有一种方法:
 System.Threading.Thread.CurrentThread.Abort();
  或者          Process.GetCurrentProcess().Kill() 
  或者          Application.ExitThread();
  或者          Application.ExitThread()

--------------------编程问答-------------------- Mark --------------------编程问答--------------------
引用 14 楼 shinysky1218 的回复:
使用Process类的close方法关闭winrar.exe进程,任务管理器中仍然存在该进程,且占有资源.多次使用Process启动winrar进程,仍后close,会发现任务管理器出现很多的winrar.exe进程,不知有什么办法解决?跟LZ的遇到问题一样

会不会是因为线程都在前台?


前台线程 (Foreground Threads):  前台线程可以阻止程序退出。除非所有前台线程都结束,否则 CLR不会关闭程序。 

后台线程 (Background Threads) : 有时候也叫 Daemon Thread 。他被 CLR 认为是不重要的执行路径,可以在任何时候舍弃。因此当所有的前台线程结束,即使还有后台线程在执行, CLR 也会关闭程序。 

 
使用 Thread 类启动一个线程默认就是前台线程 (Foreground Threads) ,但是可以通过给 IsBackground 赋值将线程转变为后台线程。 

--------------------编程问答-------------------- 任务管理器中
如果在应用程序选项卡关闭程序,任务管理器会像程序发送WM_Close消息
如果在进程选项卡关闭则调用TerminateProcess函数 --------------------编程问答-------------------- 获取所有线程 然后判断线程名称 再用kill方法  --------------------编程问答-------------------- mark --------------------编程问答-------------------- 两者有什么区别? --------------------编程问答--------------------
引用 29 楼 josxhn 的回复:
两者有什么区别?


举个例子:打开一个Explorer的窗口,“结束任务”只会关闭这个窗口,“结束进程”(Kill Explorer.exe ?)会导致Explorer.exe重启


我最近也被要求实现用“结束任务”来关闭一个资源管理器窗口的功能~求方法~~~ --------------------编程问答-------------------- 搞不定的时候,直接WIN32API...
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,