mirror of
https://github.com/saltstack/salt.git
synced 2025-04-17 10:10:20 +00:00
Gate win_osinfo and winservice better
This commit is contained in:
parent
082105fa84
commit
4e08534877
2 changed files with 66 additions and 65 deletions
|
@ -29,34 +29,34 @@ def __virtual__():
|
|||
return 'win_osinfo'
|
||||
|
||||
|
||||
class OSVERSIONINFO(ctypes.Structure):
|
||||
_fields_ = (('dwOSVersionInfoSize', DWORD),
|
||||
('dwMajorVersion', DWORD),
|
||||
('dwMinorVersion', DWORD),
|
||||
('dwBuildNumber', DWORD),
|
||||
('dwPlatformId', DWORD),
|
||||
('szCSDVersion', WCHAR * 128))
|
||||
|
||||
def __init__(self, *args, **kwds):
|
||||
super(OSVERSIONINFO, self).__init__(*args, **kwds)
|
||||
self.dwOSVersionInfoSize = ctypes.sizeof(self)
|
||||
kernel32.GetVersionExW(ctypes.byref(self))
|
||||
|
||||
|
||||
class OSVERSIONINFOEX(OSVERSIONINFO):
|
||||
_fields_ = (('wServicePackMajor', WORD),
|
||||
('wServicePackMinor', WORD),
|
||||
('wSuiteMask', WORD),
|
||||
('wProductType', BYTE),
|
||||
('wReserved', BYTE))
|
||||
|
||||
|
||||
def errcheck_bool(result, func, args):
|
||||
if not result:
|
||||
raise ctypes.WinError(ctypes.get_last_error())
|
||||
return args
|
||||
|
||||
if HAS_WIN32:
|
||||
class OSVERSIONINFO(ctypes.Structure):
|
||||
_fields_ = (('dwOSVersionInfoSize', DWORD),
|
||||
('dwMajorVersion', DWORD),
|
||||
('dwMinorVersion', DWORD),
|
||||
('dwBuildNumber', DWORD),
|
||||
('dwPlatformId', DWORD),
|
||||
('szCSDVersion', WCHAR * 128))
|
||||
|
||||
def __init__(self, *args, **kwds):
|
||||
super(OSVERSIONINFO, self).__init__(*args, **kwds)
|
||||
self.dwOSVersionInfoSize = ctypes.sizeof(self)
|
||||
kernel32.GetVersionExW(ctypes.byref(self))
|
||||
|
||||
|
||||
class OSVERSIONINFOEX(OSVERSIONINFO):
|
||||
_fields_ = (('wServicePackMajor', WORD),
|
||||
('wServicePackMinor', WORD),
|
||||
('wSuiteMask', WORD),
|
||||
('wProductType', BYTE),
|
||||
('wReserved', BYTE))
|
||||
|
||||
|
||||
def errcheck_bool(result, func, args):
|
||||
if not result:
|
||||
raise ctypes.WinError(ctypes.get_last_error())
|
||||
return args
|
||||
|
||||
kernel32.GetVersionExW.errcheck = errcheck_bool
|
||||
kernel32.GetVersionExW.argtypes = (ctypes.POINTER(OSVERSIONINFO),)
|
||||
|
||||
|
|
|
@ -30,52 +30,53 @@ def __virtual__():
|
|||
return 'winservice'
|
||||
|
||||
|
||||
class Service(win32serviceutil.ServiceFramework):
|
||||
if HAS_WIN32:
|
||||
class Service(win32serviceutil.ServiceFramework):
|
||||
|
||||
_svc_name_ = '_unNamed'
|
||||
_svc_display_name_ = '_Service Template'
|
||||
_svc_name_ = '_unNamed'
|
||||
_svc_display_name_ = '_Service Template'
|
||||
|
||||
def __init__(self, *args):
|
||||
win32serviceutil.ServiceFramework.__init__(self, *args)
|
||||
self.log('init')
|
||||
self.stop_event = win32event.CreateEvent(None, 0, 0, None)
|
||||
def __init__(self, *args):
|
||||
win32serviceutil.ServiceFramework.__init__(self, *args)
|
||||
self.log('init')
|
||||
self.stop_event = win32event.CreateEvent(None, 0, 0, None)
|
||||
|
||||
def log(self, msg):
|
||||
import servicemanager
|
||||
servicemanager.LogInfoMsg(str(msg))
|
||||
def log(self, msg):
|
||||
import servicemanager
|
||||
servicemanager.LogInfoMsg(str(msg))
|
||||
|
||||
def sleep(self, sec):
|
||||
win32api.Sleep(sec * 1000, True)
|
||||
def sleep(self, sec):
|
||||
win32api.Sleep(sec * 1000, True)
|
||||
|
||||
def SvcDoRun(self): # pylint: disable=C0103
|
||||
self.ReportServiceStatus(win32service.SERVICE_START_PENDING)
|
||||
try:
|
||||
self.ReportServiceStatus(win32service.SERVICE_RUNNING)
|
||||
self.log('start')
|
||||
self.start()
|
||||
self.log('wait')
|
||||
win32event.WaitForSingleObject(self.stop_event,
|
||||
win32event.INFINITE)
|
||||
self.log('done')
|
||||
except Exception as err:
|
||||
self.log('Exception: {0}'.format(err))
|
||||
self.SvcStop()
|
||||
def SvcDoRun(self): # pylint: disable=C0103
|
||||
self.ReportServiceStatus(win32service.SERVICE_START_PENDING)
|
||||
try:
|
||||
self.ReportServiceStatus(win32service.SERVICE_RUNNING)
|
||||
self.log('start')
|
||||
self.start()
|
||||
self.log('wait')
|
||||
win32event.WaitForSingleObject(self.stop_event,
|
||||
win32event.INFINITE)
|
||||
self.log('done')
|
||||
except Exception as err:
|
||||
self.log('Exception: {0}'.format(err))
|
||||
self.SvcStop()
|
||||
|
||||
def SvcStop(self): # pylint: disable=C0103
|
||||
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
|
||||
self.log('stopping')
|
||||
self.stop()
|
||||
self.log('stopped')
|
||||
win32event.SetEvent(self.stop_event)
|
||||
self.ReportServiceStatus(win32service.SERVICE_STOPPED)
|
||||
def SvcStop(self): # pylint: disable=C0103
|
||||
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
|
||||
self.log('stopping')
|
||||
self.stop()
|
||||
self.log('stopped')
|
||||
win32event.SetEvent(self.stop_event)
|
||||
self.ReportServiceStatus(win32service.SERVICE_STOPPED)
|
||||
|
||||
# to be overridden
|
||||
def start(self):
|
||||
pass
|
||||
# to be overridden
|
||||
def start(self):
|
||||
pass
|
||||
|
||||
# to be overridden
|
||||
def stop(self):
|
||||
pass
|
||||
# to be overridden
|
||||
def stop(self):
|
||||
pass
|
||||
|
||||
|
||||
def instart(cls, name, display_name=None, stay_alive=True):
|
||||
|
|
Loading…
Add table
Reference in a new issue