好的,为了简单起见,我在同一个文件夹中有一个文件名为flashpolicy.xml我想在843号港服务。我完全没有使用python的经验,但是我已经做过一些其他语言的工作,这是我最近尝试合并其他人的代码并尝试使其工作。我现在可以运行这个脚本,它将正确注册服务,我可以启动服务,如果我做netstat-na,我会看到正确的端口正在监听。错误日志指示在我的版本中运行的最后一行是: thread.start_new_线程(自我控制, self.sock.接受())
import pythoncom
import win32serviceutil
import win32service
import win32event
import servicemanager
import socket
import sys
import optparse
import thread
import exceptions
import contextlib
import logging
class AppServerSvc (win32serviceutil.ServiceFramework):
_svc_name_ = "flaspsrv"
_svc_display_name_ = "Flash Policy Server"
_svc_description_ = "Initialize Flash Policy Server"
def __init__(self,args):
logging.basicConfig(filename='C:\\Uploads\\testing.log', level=logging.DEBUG, filemode='a', format='%(asctime)s %(levelname)s %(message)s')
win32serviceutil.ServiceFramework.__init__(self,args)
self.hWaitStop = win32event.CreateEvent(None,0,0,None)
socket.setdefaulttimeout(60)
def SvcStop(self):
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
win32event.SetEvent(self.hWaitStop)
def SvcDoRun(self):
servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
servicemanager.PYS_SERVICE_STARTED,
(self._svc_name_,''))
self.main()
def main(self):
try:
self.sock = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
except AttributeError:
# AttributeError catches Python built without IPv6
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error:
# socket.error catches OS with IPv6 disabled
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
logging.info('Listening on port 843')
self.sock.bind(('', 843))
self.sock.listen(5)
try:
while True:
thread.start_new_thread(self.handle, self.sock.accept())
except socket.error, e:
logging.info('Error accepting connection: %s' % (e[1],))
def handle(self, conn, addr):
logging.info('Temp2')
addrstr = '%s:%s' % (addr[0],addr[1])
try:
logging.info('Connection from %s' % (addrstr,))
with contextlib.closing(conn):
# It's possible that we won't get the entire request in
# a single recv, but very unlikely.
request = conn.recv(1024).strip()
if request != '<policy-file-request/>\0':
logging.info('Unrecognized request from %s: %s' % (addrstr, request))
return
logging.info('Valid request received from %s' % (addrstr,))
fo = open('flashpolicy.xml', 'rb')
str=fo.read()
conn.sendall(str)
logging.info('Sent policy file to %s' % (addrstr,))
except socket.error, e:
logging.info('Error handling connection from %s: %s' % (addrstr, e[1]))
except Exception, e:
logging.info('Error handling connection from %s: %s' % (addrstr, e[1]))
if __name__ == '__main__':
win32serviceutil.HandleCommandLine(AppServerSvc)
哦,我想看看我知道的原稿100%正确是有帮助的:
^{pr2}$
在完成了几次不同的尝试/版本之后,我尝试使用以下步骤将原始的python脚本作为服务安装:
http://www.tacktech.com/display.cfm?ttid=197
这样做之后,当我启动我的服务时,它会向我提供一条消息,说明它开始了,然后又停止了。我以为这个例子使用的是.exe的扩展名,.py扩展名可能无效,所以我下载了py2exe并将python脚本转换为可执行文件,但是这仍然没有解决问题。最后,我得出结论,这个特定的脚本不想作为服务安装,但我确实找到了一种方法,使它隐形运行,这是我的最终目标。在
为此(在Windows中),我创建了一个名为不可见.vbs具体如下:
为了执行此文件,我创建了以下文件,并将其添加到我的启动文件夹中:
^{pr2}$但是,如果有人需要做类似的事情,您只需在命令提示符中手动输入上述命令,假设您有wscript模块(基于Windows的脚本主机)。在
相关问题 更多 >
编程相关推荐