如何使安装为服务的Python脚本在注销后继续运行?

3

我按照这个答案中的指示编写了一个Python脚本,用作服务。我将循环代码放在def main()中。

我使用python my_script.py install安装了该服务。我能够通过Windows XP中的services.msc启动和停止该服务。

这是一个日志记录程序,旨在在Windows运行时写入日志。它不应关心任何人是否登录或注销。我的问题是,当我注销后,服务会停止。如何使其在注销后仍然可以继续运行?

1个回答

2

当用户关闭控制台、注销或关闭系统时,系统会生成CTRL_CLOSE_EVENT、CTRL_LOGOFF_EVENT和CTRL_SHUTDOWN_EVENT信号,以便进程在终止之前有机会进行清理。为确保将您的服务与所有这些内容分离,您需要使用控制处理程序将其设置为此方式:

  win32api.SetConsoleCtrlHandler(lambda x: True, True)  

请查看:http://msdn.microsoft.com/en-us/library/ms685049(v=VS.85).aspx
我刚刚查看了一个非常好的示例,可以为您很好地说明这一点。
以下是相关链接:

这行代码应该放在哪里?我说它应该在这个代码片段__init__类中,是吗? - Kit
@Kit:请看我上面编辑过的答案。我刚刚发现有一份Python代码可以帮助你解决这个问题。 - pyfunc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接