Wie kann ich verhindern, dass Windows von meiner Perl Ausnahme zu kontrollieren?

stimmen
4

Ich habe diese Perl-Software, die angeblich 24/7 laufen. Es hält eine Verbindung zu einem IMAP-Server öffnen, sucht nach neuen E-Mail und klassifiziert dann neue Nachrichten.

Jetzt habe ich einen Benutzer, der seine XP Laptop in einem während jeder einmal im Ruhezustand ist. Wenn dies geschieht, schlägt die Verbindung zum Server und eine Ausnahme ausgelöst wird. Der Aufrufcode fängt in der Regel, dass die Ausnahme und versucht, die Verbindung wiederherzustellen. Aber in diesem Fall, so scheint es, dass Windows (oder Perl?) Ist die Ausnahme abfangen und sie den Benutzer über ein Meldungsfeld zu liefern.

Wer weiß, wie ich diese Art von wtf verhindern kann? Könnte mein Code fängt ein System-ist-über-to-Ruhezustand Signal?

Zur Klärung einige Punkte, die Sie bereits angesprochen:

  • Ich habe kein Problem mit den Nutzern, ihre Maschinen hibernating. Ich brauche nur einen Weg zu finden, damit umzugehen.
  • Das Perl-Modul in Frage macht eine Ausnahme werfen. Es tut so etwas wie „die‚foo bar‘. Obwohl die Anwendung vollständig Browser-basiert und verwendet nicht so etwas wie Wx oder Tk, erhält der Benutzer eine Nachricht Feld mit dem Titel‚poll_timer‘. Der Inhalt dieser Nachricht Box ist genau der Inhalt von $ @ ( 'foo bar' in diesem Beispiel).
  • Die Anwendung wird in eine ausführbare Datei mit kompilierten PerlApp . Die Dokumentation nicht erwähnt nichts über die Ausnahmebehandlung, though.
Veröffentlicht am 09/12/2008 um 15:22
quelle vom benutzer
In anderen Sprachen...                            


4 antworten

stimmen
1

Ich denke, dass Sie mit einer OS-Level-Ausnahme zu tun hat, nicht etwas von Perl geworfen. Der entsprechende Perl-Modul macht einen Aufruf an etwas in einer DLL (nehme ich an), und die Ausnahme ausgelöst wird immer. Ihre beste Wette wäre dies lässt sich auf einen einfachen, replizierbar Testfall, der die Ausnahme auslöst (man könnte viel hibernating zu tun haben, und Wachen, die für diesen Prozess beteiligten Maschinen). Dann diese Information an den Modulentwickler schicken und sie fragen, ob sie mit einem Mittel fangen diese Ausnahme in einer Art und Weise kommen können, die für Sie nützlich ist.

Wenn der Modulentwickler kann nicht oder wird nicht helfen, dann werden Sie wahrscheinlich benötigen aufzuwickeln den Perl-Debugger zu verwenden, in den Modul-Code zu debuggen und genau sehen, was los ist, und sehen, ob es einen Weg gibt, können Sie ändern, das Modul selbst, mit Ausnahme zu fangen und zu behandeln.

Beantwortet am 09/12/2008 um 18:42
quelle vom benutzer

stimmen
0

Ich habe einen Hack zu vermeiden Modalsystem Dialogfelder für harte Fehler gefunden (zB „gestoßen und Ausnahme und muss beendet werden“). Ich weiß nicht, ob der gleiche Trick für diese Art von Fehlern arbeiten Sie beschreiben, aber man könnte es versuchen.

Siehe: Die Vermeidung des „ein Problem festgestellt und muss beendet werden “ Dialog unter Windows

Kurz gesagt, stellen Sie das HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Windows \ Errormode Registrierungsschlüssel auf den Wert „2".

Beantwortet am 09/12/2008 um 19:10
quelle vom benutzer

stimmen
0

Es ist schwierig , intelligente Vorschläge anzubieten , ohne relevante Bit - Code zu sehen. Wenn Sie immer das Programm ein Dialogfeld mit einer Ausnahmemeldung wird höchstwahrscheinlich entweder die Verwendung von Tk oder wxPerl GUI - Bibliothek, die Dinge ein wenig erschweren. Mit dieser sagt, wäre meine Vermutung , dass es ziemlich einfach sein würde , die Ausnahmebehandlung im Programm zu ändern , indem Sie den Fehlerpunktes in einem eval - Block Einwickeln und nach dem Aufruf $ @ testen. Wenn $ @ enthält Verbindungsfehler eine Fehlermeldung anzeigt, dann die Verbindung wieder aufzubauen und auf dem Weg zu gehen.

Beantwortet am 09/12/2008 um 16:03
quelle vom benutzer

stimmen
0

Ihr Benutzer ist nicht die Ausnahme, sondern die Regel. Mein Laptop ist zwischen Arbeit und Zuhause überwintert. Bei der Arbeit ist es auf DHCP-Netzwerk auf; zu Hause, ist es insgesamt auf einem anderen. Die meisten Programme auch weiterhin trotz einer verwirrenden Vielzahl von IP-Adressen (VMWare, VPN, einfache alte Verbindung über NAT-Router) arbeiten. Diejenigen, die dies nicht tun (AT & T Net-Client für die VPN - ungenutzt im Büro, notwendig zu Hause oder auf der Straße) erkennt die disconnect in Hibernate Zeit (AT & T Net Client hält den StandBy / Hibernate Prozess, bis es abgeschaltet ist), und ich wieder herzustellen, die Verbindung gegebenenfalls, wenn das Gerät aufwacht. Auf Flughäfen, verwende ich die lokale WiFi (mehr DHCP), aber wiederum von dem drahtlosen insgesamt (ein physischen Schalter), bevor das Flugzeug einsteigen.

So müssen Sie herausfinden, wie man lernt, dass die Maschine in den Standby- oder Ruhezustand-Modus wird für die Software nutzbar zu sein. Was ich nicht habe, tut mir leid, zu sagen, ist ein Rezept für das, was Sie tun müssen.

Einige arbeiten mit Google schlägt vor , dass ACPI (Advanced Configuration and Power Interface) ist Teil der Lösung ist ( Microsoft ). APM (Advanced Power Management) können ebenfalls relevant sein.

Beantwortet am 09/12/2008 um 15:58
quelle vom benutzer

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