#!/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)