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

cryst2l 2017-09-22 06:02:11
请问如何在python写的windows service服务SvcDoRun中调用我写的.py程序中的函数并在启动服务的时候执行
执行的时候总是进不了另外一个文件中的函数,无法向后执行。
...全文
都看到这里了,请您评价后再走吧
3 条回复
切换为时间正序
当前发帖距今超过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
  1. #!/usr/bin/python3
  2. # -*- coding: UTF-8 -*-
  3. import win32serviceutil
  4. import win32service
  5. import win32event
  6. import os
  7. import logging
  8. import inspect
  9. # import sys
  10. # sys.path.append('E:/chenran/Projects/pythonproject/datacenter_dailyreport/')
  11. class PythonService(win32serviceutil.ServiceFramework):
  12. _svc_name_ = "PythonService"
  13. _svc_display_name_ = "Python Service Test"
  14. _svc_description_ = "This is a python service test code "
  15. def __init__(self, args):
  16. win32serviceutil.ServiceFramework.__init__(self, args)
  17. self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)
  18. self.logger = self._getLogger()
  19. self.run = True
  20. def _getLogger(self):
  21. logger = logging.getLogger('[PythonService]')
  22. this_file = inspect.getfile(inspect.currentframe())
  23. dirpath = os.path.abspath(os.path.dirname(this_file))
  24. print(dirpath)
  25. handler = logging.FileHandler(os.path.join(dirpath, "service.log"))
  26. formatter = logging.Formatter(
  27. '%(asctime)s %(name)-12s %(levelname)-8s %(message)s')
  28. handler.setFormatter(formatter)
  29. logger.addHandler(handler)
  30. logger.setLevel(logging.INFO)
  31. return logger
  32. def SvcDoRun(self):
  33. import time
  34. self.logger.info("service is run....")
  35. #import mailsend
  36. #mailsend.doFirst()
  37. # while self.run:
  38. # self.logger.info("I am runing....")
  39. import mailsend # 此处无法执行
  40. mailsend.doFirst()
  41. pt
  42. def SvcStop(self):
  43. self.logger.info("service is stop....")
  44. self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
  45. win32event.SetEvent(self.hWaitStop)
  46. self.run = False
  47. if __name__ == '__main__':
  48. win32serviceutil.HandleCommandLine(PythonService)
  49. # import mailsend
  50. # mailsend.doFirst()