Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Twisted的Python应用程序在用户注销Windows XP后停止运行_Python_Windows Services_Twisted - Fatal编程技术网

使用Twisted的Python应用程序在用户注销Windows XP后停止运行

使用Twisted的Python应用程序在用户注销Windows XP后停止运行,python,windows-services,twisted,Python,Windows Services,Twisted,我继承了一个使用TwistedPython库的项目。用户注销Windows XP后,应用程序将终止 Python代码已使用bbfreeze转换为可执行文件。此外,bbfreeze生成的可执行文件使用instsrv.exe和srvany.exe注册为Windows服务 我从Twisted网站上获取了一个简单的聊天示例,从bbfreeze创建了一个可执行文件,并在instsrv和srvany中注册了它,同样的问题也出现了:用户注销后,可执行文件停止运行 我倾向于认为Windows XP和Twiste

我继承了一个使用TwistedPython库的项目。用户注销Windows XP后,应用程序将终止

Python代码已使用bbfreeze转换为可执行文件。此外,bbfreeze生成的可执行文件使用instsrv.exe和srvany.exe注册为Windows服务

我从Twisted网站上获取了一个简单的聊天示例,从bbfreeze创建了一个可执行文件,并在instsrv和srvany中注册了它,同样的问题也出现了:用户注销后,可执行文件停止运行

我倾向于认为Windows XP和Twisted库的某些东西导致应用程序终止或停止运行。特别是,我认为可能是reactor代码中的某些东西导致应用程序代码停止运行。然而,我还不能证实这一点

是否有其他人看到了这一点,或者对可能导致这一情况的原因有任何想法

谢谢, 标记
  • 说注销时,
    • WM_QUERYENDSESSION被发送到[当前桌面上]的每个窗口
    • CTRL\u注销\u事件发送到每个进程
  • 建议如果进程没有CTRL\u LOGOFF\u事件的处理程序,则该进程可以终止
  • 从“我也可以用一个简单的聊天样本复制这个”的评论来看,Twisted是罪魁祸首。互联网上的人们确实报告说扭曲服务有时会以这种方式失败:

    Twisted有一个内部日志记录设备。答案中有一个使用它的例子。如果您使用它,您将已经看到指向根本原因的“received SIGBREAK…”消息


    顺便说一句,我使用下面的代码在脚本中记录未处理的异常。如果脚本要在无人参与的情况下运行(或由您诊断问题的其他人运行:^),这总是一个好主意

    #设置日志记录#####################################
    导入系统、操作系统、日志
    logfile=os.path.splitext(os.path.basename(sys.argv[0]))[0]+“.log”
    logging.basicConfig(\
    格式='(asctime)s%(levelname)-8s%(消息)s'\
    文件名=日志文件\
    级别=logging.DEBUG)
    l=logging.getLogger()
    #从pdb提示符重新启动后避免多个副本
    
    如果len(l.handlers)Twisted本身没有任何特殊代码来响应ivan_pozdeev在回答中提到的Windows特定事件。不过,win32eventreactor将启动Windows消息循环-不管这是否重要,我不知道。我在没有bbfreeze的情况下尝试了此操作,但问题仍然存在。我也可以用一个简单的。好的。现在我们知道,扭曲是罪魁祸首。谢谢你的例子,如果谷歌失败了,这对于进一步挖掘这一点是非常宝贵的。不过,目前还没有:请看上面我的更新。是的,是SIGBREAK造成了问题。我打开日志并确认。如果指定reactor.run(False),则在注销Windows XP时,信号处理将被禁用,服务不再终止。谢谢你的帮助。
    # 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
    # ####################################################