def install_windows_service(): """Setup waptserver as a windows Service managed by nssm >>> install_windows_service() """ import setuphelpers from setuphelpers import registry_set, REG_DWORD, REG_EXPAND_SZ, REG_MULTI_SZ, REG_SZ datatypes = {"dword": REG_DWORD, "sz": REG_SZ, "expand_sz": REG_EXPAND_SZ, "multi_sz": REG_MULTI_SZ} if setuphelpers.service_installed("waptserver"): if setuphelpers.service_is_running("waptserver"): logger.info("Stop running waptserver") setuphelpers.run("net stop waptserver") while setuphelpers.service_is_running("waptserver"): logger.debug("Waiting for waptserver to terminate") time.sleep(2) logger.info("Unregister existing waptserver") setuphelpers.run("sc delete waptserver") if setuphelpers.iswin64(): nssm = os.path.join(wapt_root_dir, "waptservice", "win64", "nssm.exe") else: nssm = os.path.join(wapt_root_dir, "waptservice", "win32", "nssm.exe") logger.info("Register new waptserver with nssm") setuphelpers.run( '"{nssm}" install WAPTServer "{waptpython}" ""{waptserverpy}""'.format( waptpython=os.path.abspath(os.path.join(wapt_root_dir, "waptpython.exe")), nssm=nssm, waptserverpy=os.path.abspath(__file__), ) ) # fix some parameters (quotes for path with spaces... params = { "Description": "sz:Wapt test server", "DelayedAutostart": 1, "DisplayName": "sz:WAPTServer", "AppStdout": r"expand_sz:{}".format(os.path.join(log_directory, "waptserver.log")), "Parameters\\AppStderr": r"expand_sz:{}".format(os.path.join(log_directory, "waptserver.log")), "Parameters\\AppParameters": r'expand_sz:"{}"'.format(os.path.abspath(__file__)), } root = setuphelpers.HKEY_LOCAL_MACHINE base = r"SYSTEM\CurrentControlSet\services\WAPTServer" for key in params: if isinstance(params[key], int): (valuetype, value) = ("dword", params[key]) elif ":" in params[key]: (valuetype, value) = params[key].split(":", 1) if valuetype == "dword": value = int(value) else: (valuetype, value) = ("sz", params[key]) fullpath = base + "\\" + key (path, keyname) = fullpath.rsplit("\\", 1) if keyname == "@" or keyname == "": keyname = None registry_set(root, path, keyname, value, type=datatypes[valuetype])
def install_windows_nssm_service(service_name, service_binary, service_parameters, service_logfile, service_dependencies=None): """Setup a program as a windows Service managed by nssm >>> install_windows_nssm_service("WAPTServer", os.path.abspath(os.path.join(wapt_root_dir,'waptpython.exe')), os.path.abspath(__file__), os.path.join(log_directory,'nssm_waptserver.log'), service_logfile, 'WAPTApache') """ import setuphelpers from setuphelpers import registry_set, REG_DWORD, REG_EXPAND_SZ, REG_MULTI_SZ, REG_SZ datatypes = { 'dword': REG_DWORD, 'sz': REG_SZ, 'expand_sz': REG_EXPAND_SZ, 'multi_sz': REG_MULTI_SZ, } if setuphelpers.service_installed(service_name): if not setuphelpers.service_is_stopped(service_name): logger.info('Stop running "%s"' % service_name) setuphelpers.run('net stop "%s" /yes' % service_name) while not setuphelpers.service_is_stopped(service_name): logger.debug('Waiting for "%s" to terminate' % service_name) time.sleep(2) logger.info('Unregister existing "%s"' % service_name) setuphelpers.run('sc delete "%s"' % service_name) if not setuphelpers.iswin64(): raise Exception('Windows 32bit install not supported') nssm = os.path.join(wapt_root_dir, 'waptservice', 'win64', 'nssm.exe') logger.info('Register service "%s" with nssm' % service_name) cmd = '"{nssm}" install "{service_name}" "{service_binary}" {service_parameters}'.format( nssm=nssm, service_name=service_name, service_binary=service_binary, service_parameters=service_parameters) logger.info('running command : %s' % cmd) setuphelpers.run(cmd) # fix some parameters (quotes for path with spaces... params = { 'Description': 'sz:%s' % service_name, 'DelayedAutostart': 1, 'DisplayName': 'sz:%s' % service_name, 'AppStdout': r'expand_sz:{}'.format(service_logfile), 'ObjectName': r'NT AUTHORITY\NetworkService', 'Parameters\\AppStderr': r'expand_sz:{}'.format(service_logfile), 'Parameters\\AppParameters': r'expand_sz:{}'.format(service_parameters), 'Parameters\\AppNoConsole': 1, } root = setuphelpers.HKEY_LOCAL_MACHINE base = r'SYSTEM\CurrentControlSet\services\%s' % service_name for key in params: if isinstance(params[key], int): (valuetype, value) = ('dword', params[key]) elif ':' in params[key]: (valuetype, value) = params[key].split(':', 1) if valuetype == 'dword': value = int(value) else: (valuetype, value) = ('sz', params[key]) fullpath = base + '\\' + key (path, keyname) = fullpath.rsplit('\\', 1) if keyname == '@' or keyname == '': keyname = None registry_set(root, path, keyname, value, type=datatypes[valuetype]) if service_dependencies: logger.info('Register dependencies for service "%s" with nssm : %s ' % (service_name, service_dependencies)) cmd = '"{nssm}" set "{service_name}" DependOnService {service_dependencies}'.format( nssm=nssm, service_name=service_name, service_dependencies=service_dependencies) logger.info('running command : %s' % cmd) setuphelpers.run(cmd)
def install_windows_nssm_service( service_name, service_binary, service_parameters, service_logfile, service_dependencies=None): """Setup a program as a windows Service managed by nssm >>> install_windows_nssm_service("WAPTServer", os.path.abspath(os.path.join(wapt_root_dir,'waptpython.exe')), os.path.abspath(__file__), os.path.join(log_directory,'nssm_waptserver.log'), service_logfile, 'WAPTApache') """ import setuphelpers from setuphelpers import registry_set, REG_DWORD, REG_EXPAND_SZ, REG_MULTI_SZ, REG_SZ datatypes = { 'dword': REG_DWORD, 'sz': REG_SZ, 'expand_sz': REG_EXPAND_SZ, 'multi_sz': REG_MULTI_SZ, } if setuphelpers.service_installed(service_name): if not setuphelpers.service_is_stopped(service_name): logger.info('Stop running "%s"' % service_name) setuphelpers.run('net stop "%s" /yes' % service_name) while not setuphelpers.service_is_stopped(service_name): logger.debug('Waiting for "%s" to terminate' % service_name) time.sleep(2) logger.info('Unregister existing "%s"' % service_name) setuphelpers.run('sc delete "%s"' % service_name) if not setuphelpers.iswin64(): raise Exception('Windows 32bit install not supported') nssm = os.path.join(wapt_root_dir, 'waptservice', 'win64', 'nssm.exe') logger.info('Register service "%s" with nssm' % service_name) cmd = '"{nssm}" install "{service_name}" "{service_binary}" {service_parameters}'.format( nssm=nssm, service_name=service_name, service_binary=service_binary, service_parameters=service_parameters ) logger.info('running command : %s' % cmd) setuphelpers.run(cmd) # fix some parameters (quotes for path with spaces... params = { 'Description': 'sz:%s' % service_name, 'DelayedAutostart': 1, 'DisplayName': 'sz:%s' % service_name, 'AppStdout': r'expand_sz:{}'.format(service_logfile), 'ObjectName': r'NT AUTHORITY\NetworkService', 'Parameters\\AppStderr': r'expand_sz:{}'.format(service_logfile), 'Parameters\\AppParameters': r'expand_sz:{}'.format(service_parameters), 'Parameters\\AppNoConsole': 1, } root = setuphelpers.HKEY_LOCAL_MACHINE base = r'SYSTEM\CurrentControlSet\services\%s' % service_name for key in params: if isinstance(params[key], int): (valuetype, value) = ('dword', params[key]) elif ':' in params[key]: (valuetype, value) = params[key].split(':', 1) if valuetype == 'dword': value = int(value) else: (valuetype, value) = ('sz', params[key]) fullpath = base + '\\' + key (path, keyname) = fullpath.rsplit('\\', 1) if keyname == '@' or keyname == '': keyname = None registry_set(root, path, keyname, value, type=datatypes[valuetype]) if service_dependencies: logger.info( 'Register dependencies for service "%s" with nssm : %s ' % (service_name, service_dependencies)) cmd = '"{nssm}" set "{service_name}" DependOnService {service_dependencies}'.format( nssm=nssm, service_name=service_name, service_dependencies=service_dependencies ) logger.info('running command : %s' % cmd) setuphelpers.run(cmd)