使用srvany.exe运行python程序时出现问题

使用srvany.exe运行python程序时出现问题,python,windows,sockets,service,tcp,Python,Windows,Sockets,Service,Tcp,我必须以一个完整的免责声明作为这篇文章的开头,即我还处于python开发的早期阶段 我制作了一个简单的python程序,它等待通过端口20000连接到本地ip地址的套接字连接。当它获得连接时,会使用win32api弹出消息警报 #tcpintercomserver.py import socket import sys import win32api ip = socket.gethostbyname(socket.gethostname()) #socket creation sock=s

我必须以一个完整的免责声明作为这篇文章的开头,即我还处于python开发的早期阶段

我制作了一个简单的python程序,它等待通过端口20000连接到本地ip地址的套接字连接。当它获得连接时,会使用win32api弹出消息警报

#tcpintercomserver.py
import socket
import sys
import win32api

ip = socket.gethostbyname(socket.gethostname())

#socket creation
sock=socket.socket(socket.AF_INET, socket.SOCK_STREAM)

#Binding
server_address = (ip, 20000)
sock.bind(server_address)
print server_address

#Listen
sock.listen(1)

while True:
# Wait for a connection
    connection, client_address = sock.accept()
    win32api.MessageBox(0,'MessageText','Titletext', 0x00001000)
    # Close Connection
    connection.close()
我还有一个匹配的客户端程序,它只需连接到套接字。该脚本接受您尝试访问的主机的参数(DNS名称或ip地址)

这一切都可以作为脚本正常运行。然后我使用CX_Freeze将它们转换为可执行文件。它们都像编写脚本时一样运行

现在,我已经使用服务器脚本,并使用srvany.exe和windows中的SC命令将其连接到一个服务

我使用SC create“intercom”binPath=“C:\dist\srvany.exe”设置该服务

在注册表中的对讲机服务项下,我添加了参数项,并在该项下将应用程序设置为字符串值c:\dist\tcpintercomserver.exe

然后,我执行“网络启动内部通信”,服务成功启动,tcpintercomserver.exe被列为正在运行的进程。但是,当我运行tcpintercomcli.py或tcpintercomcli.exe时,不会出现警报


我很困惑…CX\U冻结过程是否有什么东西可能会把事情搞砸?

服务过程无法显示messagebox,他们无法访问UI,他们通常作为系统用户运行。若您是从服务运行的,那个么调试和显示消息的正确方法是使用EventLog。 见:

如果您使用的是Windows Vista或更高版本,您的脚本将直接运行到--其中来自Windows服务的GUI元素不会显示在交互式用户的桌面上

如果您

#tcpintercomcli.py

import socket
import sys

# Create a TCP/IP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# Connect the socket to the port where the server is listening
server_address = (sys.argv[1], 20000)
sock.connect(server_address)