【问题标题】:Cannot access Python server running as Windows service无法访问作为 Windows 服务运行的 Python 服务器
【发布时间】:2010-10-24 09:37:04
【问题描述】:

我写了一个 Python TCP/IP 服务器供内部使用,使用 win32serviceutil/py2exe 创建一个 Windows 服务。

我将它安装在运行 Windows XP Pro SP3 的计算机上。但是,当它作为服务运行时,我无法连接到它。我可以确认它已绑定到地址/端口,因为当我尝试使用另一个应用程序绑定到该地址/端口时会发生冲突。此外,我检查了 Windows 防火墙设置并添加了适当的例外。如果我将服务器作为一个简单的控制台应用程序运行,一切都会按预期工作。但是,当我将它作为服务运行时,它不起作用。

我依稀记得以前遇到过这个问题,但我这辈子都不记得任何细节了。

有什么建议吗?

【问题讨论】:

    标签: python windows-services tcp


    【解决方案1】:

    程序可能会在初始化后立即终止。请检查它是否在持续监听请求。

    netstat -an |find /i "listening"
    

    并分析解析到程序的命令行。您可以使用procexp 来执行此操作。

    【讨论】:

    • 这里是相关条目: TCP server:34300 localhost:1028 TIME_WAIT TCP server:34300 [IP Address Removed]:4471 TIME_WAIT TCP server:34300 [Computer Name Removed]:61001 TIME_WAIT
    • 程序明显在监听:`TCP 0.0.0.0:34300 0.0.0.0:0 LISTENING 828
    【解决方案2】:

    首先,无论何时实现 Windows 服务,请务必添加适当的日志记录。

    我的工作线程因异常“套接字操作无法在没有阻塞的情况下完成”而终止。

    解决方案是在接受连接后简单地调用sock.setblocking(1)

    【讨论】:

      【解决方案3】:

      检查该服务是否在 Nertwork 服务帐户而不是本地系统帐户下运行。后者没有网络访问权限,并且是运行服务的默认用户。您可以通过转到开始菜单中管理工具下的服务应用程序并查找您的服务来检查这一点。如果您右键单击该服务,您可以转到属性并更改运行它的用户。

      【讨论】:

      • 正如我所提到的,当我以交互方式运行它时它可以工作。我也试过在同一个用户下运行服务,还是不行。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-18
      • 1970-01-01
      相关资源
      最近更新 更多