package org.rzo.yajsw.os.ms.win.w32; import java.util.HashMap; import java.util.Map; import jnacontrib.jna.Advapi32.ENUM_SERVICE_STATUS_PROCESS; import jnacontrib.win32.Win32Service; import org.rzo.yajsw.os.AbstractService; import org.rzo.yajsw.os.Service; import org.rzo.yajsw.os.ServiceInfo; public class WindowsXPService extends AbstractService { class MyWin32Service extends Win32Service { public MyWin32Service(String name) { super(name); } @Override public void onStart() { } @Override public void onStop() { } @Override public void log(String txt) { System.out.println(txt); } } MyWin32Service _service; public boolean install() { String command = ""; for (int i = 0; i < _command.length; i++) if (_command[i].startsWith("\"")) command += _command[i] + " "; else command += '"' + _command[i] + "\" "; return _service.install(_displayName, _description, _dependencies, _account, _password, command, _startType, _interactive); } public boolean start() { return _service.start(); } public boolean stop() { try { return _service.stop(); } catch (Exception e) { e.printStackTrace(); return false; } } // TODO add further data from Info protected static Service getService(String name) { WindowsXPService result = new WindowsXPService(); result.setName(name); result.init(); return result; } public void init() { if (_service == null) { _service = new MyWin32Service(_name); } if (_config != null && _config.getBoolean("wrapper.ntservice.interactive", false)) _interactive = true; } public boolean uninstall() { return _service.uninstall(); } public int state() { if (_service == null) return STATE_UNKNOWN; return _service.state(); } public static Map<String, ServiceInfo> getServiceList() { Map<String, ServiceInfo> result = new HashMap<String, ServiceInfo>(); Map<String, ENUM_SERVICE_STATUS_PROCESS> services = Win32Service.enumerateServices(null); for (String name : services.keySet()) { result.put(name, getServiceInfo(name)); } return result; } public static ServiceInfo getServiceInfo(String name) { return Win32Service.serviceInfo(name); } }