如何在c#中检查当前应用程序关联的进程
本文关键字:应用程序 关联 进程 检查 | 更新日期: 2023-09-27 17:53:00
我有两个c#应用程序调用ScreenScaper.exe
;当一个退出时,我不希望它结束任何名为Screenscaper.exe
的东西,我希望它结束特定的进程ID。
如何通过进程ID结束应用程序?这也意味着当我以编程方式生成应用程序时,我如何获得ProcessID ?
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),因此您可能需要详细说明父进程检查代码。