C# 关闭进程

关闭Excel进程示例
本文提供了一个使用C#代码关闭Excel应用程序的示例。通过获取Excel窗口句柄并利用P/Invoke调用Windows API,可以找到并结束指定的Excel进程。

using System.Runtime.InteropServices;

 

public class PublicMethod
    {
        public PublicMethod()
        {
            //
            // TODO: 在此处添加构造函数逻辑
            //
        }

 

        [DllImport("User32.dll", CharSet = CharSet.Auto)]
        public static extern int GetWindowThreadProcessId(IntPtr hwnd, out int ID);
        public static void Kill(Excel.Application excel)
        {
            IntPtr t = new IntPtr(excel.Hwnd); //得到这个句柄,具体作用是得到这块内存入口

            int k = 0;
            GetWindowThreadProcessId(t, out k); //得到本进程唯一标志k
            System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k); //得到对进程k的引用
            p.Kill(); //关闭进程k
        }

    }

 

在外面直接调用即可。

C#关闭进程是一个常见的需求,尤其在多进程应用程序中,开发者需要对进程进行管理,包括启动、终止以及异常处理。以下是几种常见的关闭进程的方法。 ### 使用 `Kill()` 方法强制终止进程 `Kill()` 方法是一种直接终止指定进程的方式,适用于进程无响应或需要立即终止的场景。通过 `Process.GetProcessesByName()` 可以获取所有同名的进程实例,然后逐一调用 `Kill()` 进行关闭。例如,关闭所有名为 `notepad` 的进程: ```csharp System.Diagnostics.Process[] processes = System.Diagnostics.Process.GetProcessesByName("notepad"); foreach (System.Diagnostics.Process p in processes) { p.Kill(); } ``` 此方法可以直接终止进程,但不会给进程任何清理资源的机会,因此在使用时需谨慎[^2]。 ### 尝试优雅关闭进程 在某些情况下,可能希望进程关闭前有机会进行资源清理。此时可以先尝试调用 `CloseMainWindow()` 方法发送关闭请求,若失败再使用 `Kill()` 进行强制终止。这种方式更符合用户交互逻辑,适用于有图形界面的进程: ```csharp private void KillProcess(string processName) { try { foreach (Process thisproc in Process.GetProcessesByName(processName)) { if (!thisproc.CloseMainWindow()) { thisproc.Kill(); } } } catch (Exception ex) { MessageBox.Show(ex.Message); } } ``` 此方法优先尝试优雅关闭,若失败则回退到强制终止[^3]。 ### 关闭进程的封装方法 为了提高代码的复用性,可以将关闭进程的逻辑封装成一个静态方法,方便在不同模块中调用: ```csharp public static void StopProcess(string processName) { try { System.Diagnostics.Process[] processes = System.Diagnostics.Process.GetProcessesByName(processName); foreach (System.Diagnostics.Process p in processes) { p.Kill(); } } catch (Exception ex) { throw ex; } } ``` 此方法简化了调用流程,适用于需要频繁关闭特定进程的场景[^3]。 ### 查看并关闭所有进程 在某些调试或系统管理场景中,可能需要先查看当前运行的所有进程,再选择性地关闭某些进程。可以通过 `Process.GetProcesses()` 获取所有运行中的进程,并将其名称显示在控件中,随后根据用户选择关闭对应进程: ```csharp private void btnKillPro_Click(object sender, EventArgs e) { if (listBox1.Items.Count > 0) { string name = (string)listBox1.SelectedItem; Process[] pross = Process.GetProcessesByName(name); for (int i = 0; i < pross.Length; i++) { pross[i].Kill(); } } } ``` 此方法适用于需要动态管理进程的场景,例如进程监控工具[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值