2012-03-12 5 views
3

Twisted Pythonライブラリを使用してプロジェクトを継承しました。ユーザーがWindows XPからログオフすると、アプリケーションは終了します。ユーザーがWindows XPからログオフした後にTwisted stopを使用しているPythonアプリケーション

Pythonコードは、bbfreezeを使用して実行可能ファイルに変換されました。また、bbfreeze生成された実行可能ファイルは、instsrv.exeとsrvany.exeを使用してWindowsサービスとして登録されます。

私はTwistedウェブサイトから簡単なチャットの例をとり、bbfreezeから実行可能ファイルを作成し、instsrvとsrvanyに登録して同じ問題が発生しました。ユーザーがログオフした後に実行ファイルが停止します。

Windows XPとTwistedライブラリの何かが、アプリケーションの終了や実行の停止を引き起こしていると思います。具体的には、原子炉コード内でアプリケーションコードの実行を停止させる原因になると考えられます。しかし、私はこれを確認することができませんでした。

これを見た他の人はいますか、これを引き起こしている可能性のあるアイディアがありますか?

おかげで、 マーク

答えて

2
  • "Logging Off" MSDN pageは、ログオフ、上
    • WM_QUERYENDSESSIONは、[現在のデスクトップ上の]すべてのウィンドウに送信されることを言います。
    • プロセスごとにCTRL_LOGOFF_EVENTがに送信されます。
  • ejabberd service stops on user logoff/loginは、プロセスがCTRL_LOGOFF_EVENTのハンドラを持たない場合にプロセスを終了できることを示唆しています。コメント「私も簡単なチャットサンプルでこれを再現することができ」から判断すると

、ツイストが犯人です。インターネット上の人々は、ツイスト・サービスがこのような方法で失敗することがあると報告します。Re: SIGBREAK on windows

Twistedには内部ロギング機能があります。それを使用する例は、Twisted starting/stopping factory/protocol less noisy log messagesの答えです。あなたがそれを使っていたなら、すでに "が受け取ったSIGBREAK ..."というメッセージが根本的な原因を指しているのを見たでしょう。


私は以下のようなコードを使用して、スクリプトで未処理の例外を記録しています。スクリプトが無人で実行される場合(または、^)の問題を診断する他の人がスクリプトを実行する場合は、これは常に良い考えです)。

# set up logging ##################################### 
import sys,os,logging 
logfile = os.path.splitext(os.path.basename(sys.argv[0]))[0]+".log" 
logging.basicConfig(\ 
    format='%(asctime)s %(levelname)-8s %(message)s',\ 
    filename=logfile,\ 
    level=logging.DEBUG) 
l = logging.getLogger() 
#to avoid multiple copies after restart from pdb prompt 
if len(l.handlers)<=1: l.addHandler(logging.StreamHandler(sys.stdout)) 
#hook to log unhandled exceptions 
def excepthook(type,value,traceback): 
    logging.exception("Unhandled exception occured",exc_info=(type,value,traceback)) 
    old_excepthook(type,value,traceback) 
old_excepthook = sys.excepthook 
sys.excepthook = excepthook 
# #################################################### 
+0

ツイスト自体には、この回答で述べたivan_pozdeevのWindows固有のイベントに応答する特別なコードはありません。 win32eventreactorはWindowsのメッセージループをポンピングしますが、それが重要かどうかはわかりません。 –

+0

私はbbfreezeなしでこれを試しましたが、問題はまだ存在します。私はシンプルな[チャットサンプル](http://twistedmatrix.com/documents/current/core/howto/servers.html#auto9)でこれを再現することもできます。 –

+0

良いTwistedが犯人であることが分かりました。この例をお寄せいただきありがとうございます。Googleが失敗した場合、これをさらにマイニングすることは非常に貴重です。現在のところ、それはありません:上記の私の更新を参照してください。 –

関連する問題