Ameer Salah Ответов: 3

Как проверить, был ли закрыт основной процесс браузера chrome в консольном приложении C#?


Я хочу проверить, был ли основной процесс chrome закрыт или запущен, потому что, когда пользователь закрывает браузер, фоновые процессы все еще открыты, есть какие-либо предложения?

Что я уже пробовал:

Process[] pname = Process.GetProcessesByName("chrome");
              
                    
              
                if (pname.Length == 0)
                {
                    Console.WriteLine("nothing");

                }
                else
                {
                    
                    Console.WriteLine("run");

                }

3 Ответов

Рейтинг:
2

Dave Kreskowiak

Вы можете получить "корневой" процесс Chrome с помощью WMI. То Именем Win32_Process[^] класс имеет свойство ParentProcessId.

В случае, когда Chrome запускается пользователем через запуск ярлыка Chrome из Проводника, получите ProcessId "проводника", а затем получите экземпляры Win32_Process для "chrome". Корневой процесс-это тот, который имеет ParentProcessId, соответствующий ProcessId "explorer".

Если Chrome запускается другим приложением, например щелчком по ссылке в Outlook, или из какого-то другого приложения, которое вы написали, ProcessId родителя будет тем, который запустил Chrome, а не для "проводника".


Рейтинг:
2

BillWoodruff

Это может быть полезно:

// required
using System.Diagnostics;

// in some method or eventhandler

foreach (Process process in Process.GetProcesses())
{
    string pname = process.ProcessName;

    string plower = pname.ToLower();

    string title = process.MainWindowTitle;

    if (plower.Contains("chrome") || plower.Contains("google"))
    {
        Console.WriteLine($"{pname} {title}");
    }
}
При запуске текущая активная веб-страница Chrome будет единственным процессом Chrome с "MainWindowTitle", который не является пустой строкой.

Конечно, изменение версии Chrome может изменить это.

Если бы вы сказали больше о том, какова ваша цель ... ?


Рейтинг:
16

honey the codewitch

// it's goofy, but do this instead
/* it will not return the "main process" though - there's no ready way to know that with chrome. Chrome will spawn multiple chrome processes even when it's "not running."
*/ 

var procs = Process.GetProcesses();
var found = false;
foreach (var proc in procs)
{
	if("chrome"==proc.ProcessName)
	{
		found = true;
		break;
	}
}
Console.WriteLine(found ? "run" : "nothing");