Как я могу предотвратить Windows, от ловли моего Perl исключения?

голоса
4

У меня есть это программное обеспечение на Perl, который должен работать в режиме 24/7. Она хранит открыть соединение с сервером IMAP, проверяет наличие новой почты, а затем классифицирует новые сообщения.

Теперь у меня есть пользователь, который зимует его XP ноутбук каждый раз в то время. Когда это происходит, подключение к серверу не удается, и исключение срабатывает. Вызывающий код обычно ловит, что исключение и пытается восстановить. Но в данном случае, кажется, что для Windows (или Perl?) Ловит исключение и его доставку к пользователю через окно сообщения.

Кто-нибудь знает, как я могу предотвратить такой WTF? Может ли мой код поймать «система-это-о-к-спящий режим» сигнал?

Для того, чтобы прояснить некоторые вопросы, которые вы уже поднятые:

  • У меня нет никаких проблем с пользователями, зимующих свои машины. Мне просто нужно найти способ справиться с этим.
  • Модуль Perl в вопросе делает исключение. Он делает что-то вроде «умереть„Foo бар“. Несмотря на то, приложение полностью на основе браузера и ничего подобного Wx или Tk не использовать, пользователь получает окно сообщения под названием„poll_timer“. Содержание этого окна сообщения является именно содержание от $ @ ( 'Foo бар' в этом примере).
  • Приложение компилируется в исполняемый файл с помощью perlapp . В документации ничего не знает о обработки исключений не упоминается, хотя.
Задан 09/12/2008 в 15:22
источник пользователем
На других языках...                            


4 ответов

голоса
1

Я думаю, что вы имеете дело с исключением на уровень ОС, а не что-то брошенное из Perl. Соответствующий модуль Perl делает вызов к чему-то в DLL (я предполагаю), и исключение становится выброшен. Лучше всего было бы, чтобы вскипятить это к простому, воспроизводимой теста, который вызывает исключение (вы, возможно, придется сделать много зимующих и бодрствования машин, участвующих в этом процессе). Затем отправить эту информацию разработчику модуля и спросить их, если они могут придумать средство ловли этого исключения таким образом, что является более полезным для вас.

Если разработчик модуля не может или не поможет, то вы, вероятно, ветер необходимости использовать отладчик Perl для отладки в код модуля и увидеть то, что происходит, и посмотреть, если есть способ, вы можете изменить модуль самостоятельно, чтобы поймать и дело с исключением.

Ответил 09/12/2008 в 18:42
источник пользователем

голоса
0

Я нашел хак, чтобы избежать диалоговых окон системы модальной для жестких ошибок (например, «встречается и исключение и нужно закрыть»). Я не знаю, если тот же трюк будет работать для такого рода ошибки вы описываете, но вы могли бы дать ему попробовать.

См: Как избежать «столкнулся с проблемой и необходимо закрыть» диалог на Windows ,

Короче говоря, установите HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Windows \ ErrorMode ключ реестра со значением «2".

Ответил 09/12/2008 в 19:10
источник пользователем

голоса
0

Трудно предложить разумные предложения , не видя соответствующие биты кода. Если вы получаете диалоговое окно с сообщением об исключении программы, скорее всего , либо с помощью Tk или wxPerl библиотеки GUI, который может осложнить вещи немного. С учетом сказанного, мое предположение было бы , что это было бы довольно легко изменить обработку исключений в программе, обернув точку отказа в блоке Eval и тестирование $ @ после вызова. Если $ @ содержит сообщение об ошибке , указывающее на ошибку соединения, а затем повторно установить соединение и идти по пути.

Ответил 09/12/2008 в 16:03
источник пользователем

голоса
0

Ваш пользователь не является исключение, а скорее правило. Мой ноутбук зимовали между работой и домом. На работе он включен в DHCP сети; дома, это на другом вообще. Большинство программ продолжают работать, несмотря на запутанную множественность IP-адреса (VMWare, VPN, обычное старое подключение через маршрутизатор NAT). Те, которые не (AT & T Net Client, для VPN - не используется в офисе, необходимо дома или на дороге) признать разъединение во время спящего режима (AT & T Net Client держит процесс ждущий / спящий, пока он не отключился), и заново установить соединение, если уместно, когда машина просыпается. В аэропортах, я использую локальный WiFi (более DHCP), но очередь радио в целом (один физический переключатель) перед посадкой в ​​самолет.

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

Некоторые из них работает с Google предполагает , что ACPI (Advanced Configuration и питание) является частью решения ( Microsoft ). APM (Advanced Power Management) также может иметь значение.

Ответил 09/12/2008 в 15:58
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more