import sys import os.path import time import unittest import win32service import win32serviceutil from multiprocessing import Process def sleep(): time.sleep(5) class SampleService(win32serviceutil.ServiceFramework): _svc_name_ = "ProcessSpawiningTest" _svc_display_name_ = "Temporary service for testing process spawning" def __init__(self, args): win32serviceutil.ServiceFramework.__init__(self, args) def SvcStop(self): pass def SvcDoRun(self): p = Process(target=sleep) p.start() self.ReportServiceStatus(win32service.SERVICE_RUNNING) p.join() class TestProcessSpawning(unittest.TestCase): def setUp(self): module = os.path.splitext(sys.modules[SampleService.__module__].__file__)[0] win32serviceutil.InstallService( "%s.%s" % (module, SampleService.__name__), SampleService._svc_name_, SampleService._svc_display_name_, startType=win32service.SERVICE_DEMAND_START) def tearDown(self): if win32serviceutil.QueryServiceStatus(SampleService._svc_name_)[1] == win32service.SERVICE_RUNNING: win32serviceutil.StopService(SampleService._svc_name_) win32serviceutil.RemoveService(SampleService._svc_name_) def test_spawining_within_service(self): win32serviceutil.StartService(SampleService._svc_name_) time.sleep(2) status = win32serviceutil.QueryServiceStatus(SampleService._svc_name_)[1] self.assertEqual(status, win32service.SERVICE_RUNNING) if __name__ == '__main__': unittest.main()