![]() |
|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]()
|
|
| Kim |
|
|||
|
Unregistered |
Народ, подсобите плиз кто чем может... запарился уже...
В общем, есть такая ситуевинка. Имеется мой проект (на дельфи), который принимает исходники других проектов (не важно, каким образом принимает). Например, эти проекты тоже писаны на дельфи. Присылаемые проекты (будем называть их ПП) компилируются и запускаются. Важное условие: исходники ПП не должны меняться! Они запускаются так, как есть... При запуске юзается функция CreateProcess. Но там (в ПП) может быть что угодно. И бывает, что они вылетают с run-time error'ом. В этом случае появляется радостное окошко от "умной" винды о том, что "приложение выполнило ... и должно быть закрыто". А вот этого-то как раз и не надо. Потому как пока руками не будет нажата кнопка Terminate на сообщении процесс ПП не может быть закрыт даже TerminateProcess. А надо, чтобы проект работал корректно... Перенаправление вывода ничего не дает... все равно вываливается это окошко Просьба предложить решение, где не пришлось бы программно искать окошко этого сообщения и программно же нажимать кнопочку... хотелось бы корректное решение... //вынь 2к3 (в идеале - должно работать на любой выне) //дельфи7 |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 9 Всего: 98 |
полностью отключи уведомление об ошибках и программа будет спокойно умирать...
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Kim |
|
|||
|
Unregistered |
какие это опции компилятора?
|
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 9 Всего: 98 |
это опции системы
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Kim |
|
|||
|
Unregistered |
смешно... а какие именно?.. ты не мог бы не давать столь туманных объяснений?..
какую конкретно службу необходимо завалить? |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 9 Всего: 98 |
ну, батенька, свою систему ( на уровне трех кликов мышой ) надо бы знать...
System Properties->Advanced->Error Reporting -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Kim |
|
|||
|
Unregistered |
Знаешь... фишка вот в чем... отключил эту опцию... а дальше откомпилил и запустил следующий код:
{$APPTYPE CONSOLE} var f, g: text; a, b: longint; x: real; begin a:=1; b:=0; x:=a/b; x:=x; writeln(x); end. и у меня опять вылезла эта фигня... |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 9 Всего: 98 |
тогда DEBUG_PROCESS к dwCreationFlags добавь
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Kim |
|
|||
|
Unregistered |
То есть мой процесс становится дебаггером этого нового процесса?
а как обрабатывать события? например, возникает это событие... как мне узнать, что именно ран-тайм эррор, а не просто повесилась прога? если не сложно - пару строк кода... |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 9 Всего: 98 |
ого куда мы заехали...
http://msdn.microsoft.com/library/default....s_main_loop.asp -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Kim |
|
|||
|
Unregistered |
крута. Биг сенкс. Вот это реальная помощь... только остался один вопрос: у меня процессу выделяется не больше определенного интервала времени. И я вызываю WaitForSingleObject. Если он превышает интервал, то приложение снимается. Достаточно ли будет просто заменить эту функцию на WaitForDebugEvent?
и еще в догон: (чтоб понаглеть ;) ) Есть ли возможность ограничить ПП в ресурсах? например, не более определенного объема памяти, доступ - только к определенным к папкам и т.д...? |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 9 Всего: 98 |
нет. потому как WaitForDebugEvent может как сработать несколько раз так и не сработать ни разу. так что лучше два потока стартануть ( оно и не особо накладно ).
для ограничения доступа можно использовать CreateProcessAsUser ( и, соответственно, создать пользователя с правом доступа только к определенным папкам ) а вот с объемом памяти все гараздо интереснее: как система должна себя вести при превышении лимита? просто не давать памяти? так программа завернется. самой закрывать? поэтому тут придется самому монитор писать ( еще оди поток, в котором раз в н секунд делаем снимок ( CreateToolhelp32Snapshot ) ) и закрывать программу по превышению лимита -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Darhazer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 28.9.2005 Где: HellCity (Sofia, Bulgaria) Репутация: нет Всего: 29 |
А почему не пользуете try...except
Это сообщение отредактировал(а) Darhazer - 27.10.2005, 18:08 -------------------- I'm a wheel, I'm a wheel, I can roll, I can feel But you can't stop me turning 'Cause I'm the sun, I'm the sun, I can move, I can run But you'll never stom me burning |
|||
|
||||
| Kim |
|
|||
|
Unregistered |
Нет, здесь логика работы очень жесткая: превысил ПП лимит времени (т.е. сработал WaitForSingleObject один раз), или вызван эксепшн (т.е. сработал WaitForDebugEvent один раз), или превышен лимит памяти - проект сразу должен быть завален...
И еще... WaitForSingleObject мне и нужен-то был для установления лимита времени. По идее то же самое умеет и WaitForDebugEvent... вот только передаст ли он управление при завершении процесса так же, как и WaitForSingleObject? Если да - то тогда просто тупо его заменить и все... |
|||
|
||||
| Kim |
|
|||
|
Unregistered |
Darhazer, потому, что это проверяющая система. Она смотрит, правильно ли ТЫ написал исходник ;)
|
|||
|
||||
![]()
|
| Правила форума "Delphi: WinAPI и системное программирование" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |