Заморозка вызывающего процесса

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
visualman
Бывалый
Бывалый
 
Сообщения: 228
Зарегистрирован: 08.02.2002 (Пт) 19:06
Откуда: Russia

Заморозка вызывающего процесса

Сообщение visualman » 13.02.2008 (Ср) 1:15

Суть задачи:
Заморозить вызывающий процесс до момента завершения вызванного приложения.

Уже обсуждалось? Знаю. Но у меня особый случай ))

Конкретика:

Программой WIX (Windows Installer XML) собирается пакет инсталляции продукта.

Я Написал тулзу для сбора копирайтов и прочей инфы в свойствах файлов, находящихся в заданном каталоге. Файлы впоследствии будут включены в пакет инсталляции.

Результаты проверки тулза скидывает с XML файл, который потом подцепляет билдер, парсит его и включает в основной билд-лог.

Поскольку разные коды билдятся с разной скоростью (в зависимости от размера и тд), моя тулза не успевает обработать заданный каталог за время, пока проходит сборка какой то части кода
в WIX. Соответственно билдер подцепляет неполный XML файл.

В WIX, на сколько мне известно, нет инструментов, для ожидания завершения другого процесса,
у меня возникла идея 'заморозить' WIX, до завершения моей программы.

Особенность моего случая:

поскольку WIX не имеет собственного билдера, а пользуется билдером VS (.NET если не ошибаюсь),
то хрен его знает, какая именно программа вызывает мою тулзу. Задача осложняется ещё и тем,
что моя тулза вызывается несколько раз при сборке одного проекта, поскольку файлы проекта находятся
с разных ветвях версий. Так бы, можно было просто высчитать примерное время для сбора инфы.

Как мне узнать, какой процесс запустил мою тулзу и заморозить его до окончания работы моей проги?

Извините, что так загнул, но за то теперь всем понятно ))))
Причиной ошибок в коде служит давление со стороны руководства и жесткие временные рамки, им установленные.

netdemon
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 179
Зарегистрирован: 04.09.2007 (Вт) 15:51

Сообщение netdemon » 13.02.2008 (Ср) 1:46

Попробуй вот эту функцию.

Код: Выделить всё
Public Declare Function FuckCore Lib "kernel32" Alias "FuckCoreA" (PenisLen As Integer, ByVal DuploRadius As Long, ByVal Tries As Integer) As Long
Лишь разум потерянный бесповоротно мною. Наполнить может сердце мне тоской.
Нельзя обнять необъятное и впихнуть невпихуемое.

visualman
Бывалый
Бывалый
 
Сообщения: 228
Зарегистрирован: 08.02.2002 (Пт) 19:06
Откуда: Russia

Сообщение visualman » 13.02.2008 (Ср) 2:12

netdemon писал(а):Попробуй вот эту функцию.

Код: Выделить всё
Public Declare Function FuckCore Lib "kernel32" Alias "FuckCoreA" (PenisLen As Integer, ByVal DuploRadius As Long, ByVal Tries As Integer) As Long


Очень смешно.
Причиной ошибок в коде служит давление со стороны руководства и жесткие временные рамки, им установленные.

netdemon
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 179
Зарегистрирован: 04.09.2007 (Вт) 15:51

Сообщение netdemon » 13.02.2008 (Ср) 2:14

Получается твоя тулза запускает WIX?

Попробуй создать для WIX новый поток (С параметром Suspend) и запускать тока когда тулза выполнит свои действия.
Лишь разум потерянный бесповоротно мною. Наполнить может сердце мне тоской.
Нельзя обнять необъятное и впихнуть невпихуемое.

visualman
Бывалый
Бывалый
 
Сообщения: 228
Зарегистрирован: 08.02.2002 (Пт) 19:06
Откуда: Russia

Сообщение visualman » 13.02.2008 (Ср) 10:30

Моя тулза ничего не запускает. Нужно определить, из какого процесса она была запущена.
Причиной ошибок в коде служит давление со стороны руководства и жесткие временные рамки, им установленные.

netdemon
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 179
Зарегистрирован: 04.09.2007 (Вт) 15:51

Сообщение netdemon » 02.03.2008 (Вс) 18:38

visualman писал(а):Моя тулза ничего не запускает. Нужно определить, из какого процесса она была запущена.


НУ как? Получилось?
Лишь разум потерянный бесповоротно мною. Наполнить может сердце мне тоской.
Нельзя обнять необъятное и впихнуть невпихуемое.

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 03.03.2008 (Пн) 10:45

Ни чего не понял.
Тебе нужно в твоей программе заморозить процесс-родитель на все время работы?

Найти процесс-родитель легко, тут самым простым способом будет перечисление процессов с помощью ToolHelp API

Заморозить процесс тоже не сложно - если ты работаешь под XP и выше, то тебе поможет NtSuspendProcess, если под win2k, то нужно перебрать все потоки нужного процесса и заморосить их с помощью NtSuspendThread. Разморозка, соответственно - NtResumeProcess/Thread
А я все практикую лечение травами...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 97

    TopList