Jak mogę zapobiec Windows z połowu moje Perl wyjątki?

głosy
4

Mam ten program Perl, który ma działać 24/7. Utrzymuje otworzyć połączenie z serwerem IMAP, sprawdza nowe wiadomości, a następnie klasyfikuje nowe wiadomości.

Teraz mam użytkownikowi, który jest w stanie hibernacji swoją XP laptopa raz na jakiś czas. Kiedy to nastąpi, połączenie z serwerem nie powiedzie się i wyjątek jest wyzwalany. Kod wywołujący zwykle łapie ten wyjątek i próbuje ponownie. Ale w tym przypadku, wydaje się, że system Windows (lub Perl?) Jest łowienie wyjątek i dostarczanie go do użytkownika za pośrednictwem skrzynki wiadomości.

Ktoś wie, w jaki sposób można zapobiec tego rodzaju wtf? Czy moje kod haczyk „system-to-o-to-hibernacji” sygnał?

Aby wyjaśnić pewne punkty, które już podniesione:

  • Nie mam problemu z użytkownikami hibernacji swoje maszyny. Muszę tylko znaleźć sposób, aby sobie z tym poradzić.
  • Moduł Perl w pytaniu robi wyjątek. Robi coś takiego jak „die«foo bar». Mimo, że aplikacja jest całkowicie oparty przeglądarkę i nie używa czegoś podobnego Wx lub Tk, użytkownik dostaje okno komunikatu zatytułowanego«poll_timer». Zawartość tej skrzynki wiadomości jest dokładnie zawartość od $ @ ( 'foo bar' w tym przykładzie).
  • Aplikacja jest kompilowany do pliku wykonywalnego za pomocą perlapp . Dokumentacja nie wspomina nic na temat obsługi wyjątków, choć.
Utwórz 09/12/2008 o 15:22
źródło użytkownik
W innych językach...                            


4 odpowiedzi

głosy
1

Myślę, że masz do czynienia z wyjątkiem OS szczebla, a nie coś rzucony z Perl. Odpowiedni moduł Perl jest wykonanie połączenia do czegoś w DLL (przypuszczam), a wyjątkiem jest wyrzucenie. Najprościej byłoby gotować to do prostej, replikacji przypadku testowego, które wywołuje wyjątek (może trzeba zrobić dużo hibernacji i przebudzeniu maszyn uczestniczących w tym procesie). Następnie przesłać te informacje do autora modułu i ich zapytać, czy mogą one pochodzić z pomocą połowu ten wyjątek w sposób, który jest bardziej przydatne dla Ciebie.

Jeśli deweloper moduł nie może lub nie pomoże, wtedy będziesz prawdopodobnie skończyć konieczności używania debugera Perl do debugowania kodu do modułu i dokładnie sprawdzić, co się dzieje, i sprawdzić, czy istnieje sposób można zmienić moduł się złapać i radzić sobie z wyjątkiem.

Odpowiedział 09/12/2008 o 18:42
źródło użytkownik

głosy
0

Znalazłem hack unikania systemowych modalne okna dialogowe dla twardych błędów (na przykład „napotykanych wyjątek i musi zostać zamknięty”). Nie wiem, czy ta sama sztuczka zadziała dla tego rodzaju błędu jesteś opisujący, ale można spróbować.

Zobacz: Unikanie „napotkał problem i musi zostać zamknięty” okno na Windows

W skrócie, ustaw HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Windows \ ErrorMode kluczu rejestru na wartość „2".

Odpowiedział 09/12/2008 o 19:10
źródło użytkownik

głosy
0

Trudno oferują inteligentne sugestie, nie widząc odpowiednich fragmentów kodu. Jeśli otrzymujesz okno dialogowe z komunikatem wyjątku program jest najprawdopodobniej przy użyciu albo Tk lub wxPerl biblioteki GUI, które mogą komplikować nieco. Z powiedział, że moje przypuszczenie byłoby, że byłoby to dość łatwe do modyfikowania obsługę wyjątków w programie owijając punkt awarii w bloku eval i testowanie $ @ po wywołaniu. Jeśli $ @ zawiera komunikat o błędzie wskazujący błąd połączenia, a następnie ponownie nawiązać połączenie i iść na swój sposób.

Odpowiedział 09/12/2008 o 16:03
źródło użytkownik

głosy
0

Twój użytkownik nie jest wyjątkiem, lecz regułą. Mój laptop jest hibernacji między pracą a domem. W pracy, to jest on w sieci DHCP; w domu, to jest na innym zupełnie. Większość programów nadal działać mimo mylące wielość adresów IP (VMWare, VPN, zwykły stary połączenia przez router NAT). Te, które nie (AT & T Net Client dla VPN - niewykorzystane w biurze, niezbędne w domu lub na drodze) rozpoznaje rozłączanie w czasie hibernacji (AT & T Client netto trzyma się proces czuwania / hibernacji, dopóki nie odłączony) a ja ponownie nawiązać połączenie, jeśli to właściwe, gdy maszyna obudzi. Na lotniskach, używam lokalnej WiFi (DHCP), ale bardziej obrót całkowicie sieci bezprzewodowej (jeden fizycznego przełącznika) przed wejściem na pokład samolotu.

Tak, trzeba dowiedzieć się, jak się uczyć, że maszyna będzie do trybu wstrzymania lub hibernacji dla oprogramowania do użytku. Co nie mam, przykro mi to powiedzieć, to recepta na to, co trzeba zrobić.

Niektóre prace z Google sugeruje, że ACPI (ACPI) jest częścią rozwiązania ( Microsoft ). APM (Advanced Power Management) mogą również mieć znaczenie.

Odpowiedział 09/12/2008 o 15:58
źródło użytkownik

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