如何在c#中检查当前应用程序关联的进程

本文关键字:应用程序 关联 进程 检查 | 更新日期: 2023-09-27 17:53:00

我有两个c#应用程序调用ScreenScaper.exe;当一个退出时,我不希望它结束任何名为Screenscaper.exe的东西,我希望它结束特定的进程ID。

如何通过进程ID结束应用程序?这也意味着当我以编程方式生成应用程序时,我如何获得ProcessID ?

如何在c#中检查当前应用程序关联的进程

CreateToolhelp32Snapshot可以帮助您找到父(==associated?)进程ID。

例如,让我们假设你想杀死所有没有父进程的"ScreenScraper.exe"进程(即那些在正常关闭过程中挂起的进程)。代码可能看起来像这样:

class Program
{
    static void Main(string[] args)
    {
        string procName = "ScreenScraper"; // Mind no ".exe" extension here
        foreach (var process in Process.GetProcessesByName(procName))
        {
            try
            {
                var parent = myProcessEx.GetParentProcess(process.Id);
                Console.WriteLine("{0} {1}; PARENT: {2} {3}",
                    process.Id, process.ProcessName, parent.Id, parent.ProcessName);
            }
            catch (ApplicationException exception)
            {
                if (exception.InnerException is ArgumentException)
                {
                    Console.WriteLine("An orphan '{0}' process found with PID {1}. Killing it...",
                        process.Id, process.ProcessName);
                    process.Kill();
                }
                else
                    throw;
            }
        }
    }
}

myProcessEx类取自http://www.pinvoke.net/default.aspx/kernel32.createtoolhelp32snapshot的示例代码部分。

请注意,终止的父进程ID可能会被重用(https://stackoverflow.com/a/185298/4295017),因此您可能需要详细说明父进程检查代码。