#!/usr/bin/python # Copyright (C) 2010 Michael Ligh # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . import win32service import win32con import win32api import sys if len(sys.argv) != 3: print 'Usage: %s [arg1 arg2 ...]' % sys.argv[0] sys.exit() ServiceName = sys.argv[1] ImagePath = sys.argv[2] ServiceArgs = sys.argv[3:] hscm = win32service.OpenSCManager( None, None, win32service.SC_MANAGER_ALL_ACCESS) try: hs = win32service.CreateService(hscm, ServiceName, "", win32service.SERVICE_ALL_ACCESS, win32service.SERVICE_WIN32_SHARE_PROCESS, win32service.SERVICE_DEMAND_START, win32service.SERVICE_ERROR_NORMAL, "C:\\WINDOWS\\System32\\svchost.exe -k " + ServiceName, None, 0, None, None, None) except: print "Cannot create service!" sys.exit() key = win32api.RegCreateKey(win32con.HKEY_LOCAL_MACHINE, "System\\CurrentControlSet\\Services\\%s\\Parameters" % ServiceName) try: win32api.RegSetValueEx(key, "ServiceDll", 0, win32con.REG_EXPAND_SZ, ImagePath); finally: win32api.RegCloseKey(key) key = win32api.RegCreateKey(win32con.HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows NT\\CurrentVersion\\SvcHost") try: win32api.RegSetValueEx(key, ServiceName, 0, win32con.REG_MULTI_SZ, [ServiceName, '']); finally: win32api.RegCloseKey(key) win32service.StartService(hs, ServiceArgs) win32service.CloseServiceHandle(hs) win32service.CloseServiceHandle(hscm)