Какой исполняемый файл начал мой исполняемый файл? - PullRequest
3 голосов
/ 07 апреля 2010

Есть ли надежный способ узнать, какой исполняемый файл называется моим исполняемым файлом?

У меня есть исполняемый файл .NET, но я хотел бы знать, кто запустил мое приложение.

Ответы [ 3 ]

1 голос
/ 07 апреля 2010

Хотите узнать это программно?Тогда вы найдете эти связанные вопросы полезными:

Если вы просто хотите увидеть родительский процесс, вы можете использовать Process Explorer от Sysinternals.

1 голос
/ 11 апреля 2010

Зачем вам это знать? Windows не поддерживает строгую иерархию родительского процесса, как в Unix - она ​​записывает PID родительского процесса при создании процесса, но когда этот процесс завершается, он не обновляется (поскольку процесс не отслеживает своих дочерних элементов, поэтому не могу обновить его). Это означает, что возможно, что PID родительского процесса указывает на процесс, который больше не существует. Хуже того, теоретически идентификатор процесса можно использовать повторно, а это означает, что идентификатор родительского процесса может указывать на совершенно другой процесс.

1 голос
/ 07 апреля 2010

Там есть ответ на ваш вопрос http://www.codeproject.com/KB/threads/ParentPID.aspx

Короче говоря, вы создаете моментальный снимок всех процессов, запущенных с lpfCreateToolhelp32Snapshot(), а затем выполняете итерацию по нему, чтобы найти ваш процесс (обозначенный GetCurrentProcessId()) с помощью lpfProcess32First()/lpfProcess32Next(). Как только вы нашли свой собственный процесс, структура, которую вы получаете, дает вам идентификатор родительского процесса, который запустил ваше приложение.

Как только вы получите родительский PID, легко получить имя файла exe и другие атрибуты с помощью EnumProcessModules() и GetModuleFileNameEx().

Но вы, вероятно, можете просто использовать код по ссылке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...