4 / 4 / 1
Регистрация: 06.01.2012
Сообщений: 54
|
||||||
1 | ||||||
Получить id процесса родителя, если исходный id процесса дочерний17.12.2013, 00:04. Показов 7600. Ответов 8
Метки нет (Все метки)
Добрый день. У меня есть вот такой код на C#, который должен позволить получить id процесса родителя, если исходный id процесса дочерний:
Добавлено через 1 час 12 минут Проверил в Windows XP и Windows 7 — все отлично работает, а вот под восьмеркой отказывается находить модуль...
0
|
17.12.2013, 00:04 | |
Ответы с готовыми решениями:
8
В чем сходство процесса-родителя и процесса-ребенка? Получить ID процесса если известно его хэндл, название окна или название процесса Передача указателя из родительского процесса в дочерний Узнать id родителя процесса |
Администратор
|
|
17.12.2013, 18:52 | 2 |
Этот код возвращается, когда программа не может найти библиотеку. Вставьте проверку на наличие библиотек.
Также: DllNotFoundException with HRESULT 0x8007007E when loading 64-bit dll
1
|
4 / 4 / 1
Регистрация: 06.01.2012
Сообщений: 54
|
|
18.12.2013, 01:03 [ТС] | 3 |
Это интересно, но в восьмерке отсутствует куча псевдонимов, связанных с классами WMI... Process, к примеру, связанный с Win32_Process. Пытаюсь вручную подключиться на root/cimv2 через wbemtest выдает, что отсутствует модуль win32... Можно ли его установить? К примеру, в восьмерке напрочь отсутствовал .net framework более ранних версий до 3.5... пришлось устанавливать из дистрибутива восьмерки. Не может ли в этом случае быть что-либо подобное?
Добавлено через 1 час 15 минут Встретил статью на support.microsoft.com, о том, что в Windows 8, Windows Server 2012 и Windows RT есть баг в работе WMI, который исправляется с помощью обновления, но ни одно из указанных обновлений не подходит к моему компьютеру... В общем тогда поменяю вопрос. Как можно по-другому получить id родительского процесса из id дочернего процесса не прибегая к ManagementObject и к WMI?
0
|
Администратор
|
||||||
18.12.2013, 11:42 | 4 | |||||
Сообщение было отмечено tezaurismosis как решение
Решение
lesha1980, у меня о WMI сложилось ощущение как о не самой лучшей технологии из-за регулярных глюков и я стараюсь её всеми силами избегать.
С трудом нашёл код на VB, который завершает дерево процессов с помощью WinAPI и только. Возможно вам удастся его адаптировать
1
|
4 / 4 / 1
Регистрация: 06.01.2012
Сообщений: 54
|
||||||
18.12.2013, 23:06 [ТС] | 5 | |||||
tezaurismosis,
Когда гуглил, то я его видел и подумал, что это будет один из вариантов. В принципе у меня два варианта, включая этот без использования ManagmentObject. В данном случае функция GetParentProcessId, как я понял, осуществляет обход процессов (ProcessFirst32 и ProcessNext32) и запись данных о процессе в структуру PROCESSENTRY32. Конечно же, в VB я совсем не силен, но в принципе разобрать можно — "интуитивно понятный интерфейс" у программки. Ок. Все равно спасибо. Добавлено через 10 часов 4 минуты Обнаружил очень хороший ресурс в сети, где описывается вызов системных функций и структур Win Api в приложениях создаваемых для платформы .net. Кому будет интересно: http://www.pinvoke.net/. Попытаюсь с его помощью реализовать получение id через системные функции... Добавлено через 1 минуту К слову там есть и реализация PROCESSENTRY32 и тех функций, что указаны в коде постом выше... Добавлено через 53 минуты На этом же сайте обнаружил кажется и ответ на свой вопрос. Привожу код (Это пример со страницы с реализацией в .net функции createtoolhelp32snapshot):
1
|
Почетный модератор
|
|
19.12.2013, 01:21 | 6 |
Сообщение было отмечено tezaurismosis как решение
Решение
Вариант попроще: Узнать родительский процесс
1
|
4 / 4 / 1
Регистрация: 06.01.2012
Сообщений: 54
|
|
19.12.2013, 13:11 [ТС] | 7 |
Да... интересно... и, очевидно, просто лучше. Но в отношении NtQueryInformationProcess есть такая информация:
Retrieves information about the specified process. This function is available in Windows 2000 and Windows XP, but it may be altered or unavailable in subsequent versions. В машинном переводе это выглядит так: Получает информацию об указанном процессе. Эта функция доступна в Windows 2000 и Windows XP, но это может быть изменено или недоступны в последующих версиях. Это на том же сайте, что я указал... И на msdn: [NtQueryInformationProcess may be altered or unavailable in future versions of Windows. Applications should use the alternate functions listed in this topic.] Retrieves information about the specified process. Машинный перевод: [NtQueryInformationProcess могут быть изменены или недоступны в будущих версиях Windows. Приложения должны использовать альтернативные функции, перечисленные в этом разделе.] Получает информацию об указанном процессе. Т.е. данная функция может оказаться недоступной в следующих после 2000 и ХР версиях операционки Windows. А так бесспорно вариант очень хорош и прост в исполнении без внутренних многоходовок цикла по нахождению выбранного процесса, чтобы получить о нем информацию. Минус, конечно, что примененные системные функция и структура недокументированы. Если, к примеру, последнее поле в структуре PROCESS_BASIC_INFORMATION в варианте с загрузкой для .NET платформы описывается как: public IntPtr InheritedFromUniqueProcessId — то на msdn это поле указывается как зарезервированное за операционной системой. И кроме того, при первом рассмотрении не возникнет ли проблем с размером буфера для получаемой информации? Мне кажется, что этот способ хоть и лучше, но рискованней...В смысле может и сработать, а может и нет, исходя из выше изложенной инфы...
0
|
Почетный модератор
|
|
19.12.2013, 14:19 | 8 |
Не беспокойтесь, это один из основных сервисов в Windows для получения информации о состоянии процессов, в ближайших версиях он никуда не исчезнет. PROCESS_BASIC_INFORMATION не менялась со времен её появления. Хотя в Win 8 и начались подвижки в направления скрытия информации о ядерных структурах для запросов из ring3, в этой структуре никакой подобной информации нет, т.е. шанс что она будет менятся стремится к 0.
1
|
4 / 4 / 1
Регистрация: 06.01.2012
Сообщений: 54
|
|
19.12.2013, 22:59 [ТС] | 9 |
Ну что ж отлично... Спасибо вам большое. Вариант действительно хорош.
Добавлено через 7 часов 2 минуты Работает отлично и очень просто...
0
|
19.12.2013, 22:59 | |
19.12.2013, 22:59 | |
Помогаю со студенческими работами здесь
9
Как узнать родителя процесса? Определение потомка и родителя процесса Сохранение дочерного процесса при завершении родителя Через память передавать координаты и размер окружности с родительского процесса в дочерний Родительский и дочерний процесс: почему запуск начинается сразу с дочернего процесса? Чтение памяти другого процесса по таймеру: нужно ли закрывать хэндл процесса? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |