如何在python写的windows service服务SvcDoRun中调用我写的.py程序中的函数并在启动服务的时候执行

请问如何在python写的windows service服务SvcDoRun中调用我写的.py程序中的函数并在启动服务的时候执行
执行的时候总是进不了另外一个文件中的函数,无法向后执行。
执行的时候总是进不了另外一个文件中的函数,无法向后执行。
...全文
都看到这里了,请您评价后再走吧
当前发帖距今超过3年,不再开放新的回复
发表回复
xnola 2017-10-31
我也在遇到了这个问题。 一直难以解决。提供一个思路。可能是这个原因。 http://blog.csdn.net/numen27/article/details/25117669
里面提到:大多数Windows服务是以SYSTEM用户启动的,并且没有任何交互界面的。SYSTEM用户是系统中权限最高的用户,所以服务程序有极高的权限,可以操作注册表,系统目录等等。但是有写东西不一定权限高就能取到,比如说想知道当前登录用户的一些相关信息,必须是当前用户启动的程序才可能得到这些信息,用SYSTEM用户启动的服务反而得不到这些信息。
cryst2l 2017-09-25

cryst2l 2017-09-22
-
- #!/usr/bin/python3
- # -*- coding: UTF-8 -*-
- import win32serviceutil
- import win32service
- import win32event
- import os
- import logging
- import inspect
-
- # import sys
- # sys.path.append('E:/chenran/Projects/pythonproject/datacenter_dailyreport/')
-
-
- class PythonService(win32serviceutil.ServiceFramework):
-
- _svc_name_ = "PythonService"
- _svc_display_name_ = "Python Service Test"
- _svc_description_ = "This is a python service test code "
-
- def __init__(self, args):
- win32serviceutil.ServiceFramework.__init__(self, args)
- self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)
- self.logger = self._getLogger()
- self.run = True
-
- def _getLogger(self):
-
- logger = logging.getLogger('[PythonService]')
-
- this_file = inspect.getfile(inspect.currentframe())
- dirpath = os.path.abspath(os.path.dirname(this_file))
- print(dirpath)
- handler = logging.FileHandler(os.path.join(dirpath, "service.log"))
-
- formatter = logging.Formatter(
- '%(asctime)s %(name)-12s %(levelname)-8s %(message)s')
- handler.setFormatter(formatter)
-
- logger.addHandler(handler)
- logger.setLevel(logging.INFO)
-
- return logger
-
- def SvcDoRun(self):
- import time
- self.logger.info("service is run....")
- #import mailsend
- #mailsend.doFirst()
- # while self.run:
- # self.logger.info("I am runing....")
- import mailsend # 此处无法执行
- mailsend.doFirst()
-
- pt
- def SvcStop(self):
- self.logger.info("service is stop....")
- self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
- win32event.SetEvent(self.hWaitStop)
- self.run = False
-
- if __name__ == '__main__':
- win32serviceutil.HandleCommandLine(PythonService)
- # import mailsend
- # mailsend.doFirst()