public static void InstallAndStart(string serviceName, string displayName, string fileName, out IntPtr servicePtr) { IntPtr scm = OpenSCManager(Natives.ScmAccessRights.AllAccess); try { IntPtr service = Natives.OpenService(scm, serviceName, Natives.ServiceAccessRights.AllAccess); if (service == IntPtr.Zero) { service = Natives.CreateService(scm, serviceName, displayName, Natives.ServiceAccessRights.AllAccess, Natives.ServiceRights.SERVICE_KERNEL_DRIVER, Natives.ServiceBootFlag.DemandStart, Natives.ServiceError.Normal, fileName, null, IntPtr.Zero, null, null, null); } if (service == IntPtr.Zero) { throw new Exception("Open/Create Service Failed."); } try { StartService(service); servicePtr = service; } finally { Natives.CloseServiceHandle(service); } } finally { Natives.CloseServiceHandle(scm); } }
public static void Start(string serviceName) { IntPtr scm = OpenSCManager(Natives.ScmAccessRights.AllAccess); try { IntPtr service = Natives.OpenService(scm, serviceName, Natives.ServiceAccessRights.AllAccess); if (service == IntPtr.Zero) { return; //throw new Exception("Starting Service : OpenService Failed."); } try { StartService(service); } finally { Natives.CloseServiceHandle(service); } } finally { Natives.CloseServiceHandle(scm); } }
public static Natives.ServiceState GetStatus(string serviceName) { IntPtr scm = OpenSCManager(Natives.ScmAccessRights.Connect); try { IntPtr service = Natives.OpenService(scm, serviceName, Natives.ServiceAccessRights.QueryStatus); if (service == IntPtr.Zero) { return(Natives.ServiceState.NotFound); } try { return(GetServiceStatus(service)); } finally { Natives.CloseServiceHandle(service); } } finally { Natives.CloseServiceHandle(scm); } }
public static bool IsInstalled(string serviceName) { IntPtr scm = OpenSCManager(Natives.ScmAccessRights.Connect); try { IntPtr service = Natives.OpenService(scm, serviceName, Natives.ServiceAccessRights.QueryStatus); if (service == IntPtr.Zero) { return(false); } Natives.CloseServiceHandle(service); return(true); } finally { Natives.CloseServiceHandle(scm); } }
public static void StopService(string serviceName, Int32 deviceHandle = 0, Boolean uninstall = false) { IntPtr scm = OpenSCManager(Natives.ScmAccessRights.AllAccess); try { IntPtr service = Natives.OpenService(scm, serviceName, Natives.ServiceAccessRights.AllAccess); if (service == IntPtr.Zero) { return; // throw new Exception("Stopping Service : OpenService Failed."); } try { if (deviceHandle != 0) { Natives.CloseHandle(new IntPtr(deviceHandle)); } StopService(service); if (uninstall) { if (!Natives.DeleteService(service)) { throw new Exception("Delete Failed : " + Marshal.GetLastWin32Error()); } } } finally { Natives.CloseServiceHandle(service); } } finally { Natives.CloseServiceHandle(scm); } }