Skip to content

Instantly share code, notes, and snippets.

@kosztik
Forked from guillaumevincent/README.md
Created November 23, 2020 19:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kosztik/9c2a954e8ee973129bfacb1731fb6f66 to your computer and use it in GitHub Desktop.
Save kosztik/9c2a954e8ee973129bfacb1731fb6f66 to your computer and use it in GitHub Desktop.
Windows Service with Python 3.5 and pyinstaller

TestService

Windows Service with Python 3.5 and pyinstaller

Requirements

Check

(env)$ python -V
Python 3.5.2

(env)$ pip freeze
PyInstaller==3.2

Build

(env)$ pyinstaller -F --hidden-import=win32timezone WindowsService.py

Run

(env) dist\WindowsService.exe install
Installing service TestService
Service installed

(env) dist\WindowsService.exe start
Starting service TestService

Clean

(env) dist\WindowsService.exe stop
(env) dist\WindowsService.exe remove
import servicemanager
import socket
import sys
import win32event
import win32service
import win32serviceutil
class TestService(win32serviceutil.ServiceFramework):
_svc_name_ = "TestService"
_svc_display_name_ = "Test Service"
_svc_description_ = "My service description"
def __init__(self, args):
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):
rc = None
while rc != win32event.WAIT_OBJECT_0:
with open('C:\\TestService.log', 'a') as f:
f.write('test service running...\n')
rc = win32event.WaitForSingleObject(self.hWaitStop, 5000)
if __name__ == '__main__':
if len(sys.argv) == 1:
servicemanager.Initialize()
servicemanager.PrepareToHostSingle(TestService)
servicemanager.StartServiceCtrlDispatcher()
else:
win32serviceutil.HandleCommandLine(TestService)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment