namespace RadeonResetBugFixService.ThirdParty.ServiceHelpers { // Code taken from https://stackoverflow.com/a/1195621 and lightly modified using System; using System.Collections; using System.Configuration.Install; using System.ServiceProcess; class ServiceHelpers { public static bool IsInstalled(string serviceName) { using (ServiceController controller = new ServiceController(serviceName)) { try { ServiceControllerStatus status = controller.Status; } catch { return false; } return true; } } public static bool IsRunning(string serviceName) { using (ServiceController controller = new ServiceController(serviceName)) { if (!IsInstalled(serviceName)) return false; return (controller.Status == ServiceControllerStatus.Running); } } public static AssemblyInstaller GetInstaller(Type serviceType) { AssemblyInstaller installer = new AssemblyInstaller(serviceType.Assembly, null); installer.UseNewContext = true; return installer; } public static void InstallService(string serviceName, Type serviceType) { if (IsInstalled(serviceName)) { Console.WriteLine("Already installed"); return; } using (AssemblyInstaller installer = GetInstaller(serviceType)) { IDictionary state = new Hashtable(); try { installer.Install(state); installer.Commit(state); Console.WriteLine("installed"); } catch { try { installer.Rollback(state); } catch { } throw; } } } public static void UninstallService(string serviceName, Type serviceType) { if (!IsInstalled(serviceName)) { Console.WriteLine("Service not installed"); return; } using (AssemblyInstaller installer = GetInstaller(serviceType)) { IDictionary state = new Hashtable(); try { installer.Uninstall(state); } catch { throw; } } } public static void StartService(string serviceName, Type serviceType) { if (!IsInstalled(serviceName)) return; using (ServiceController controller = new ServiceController(serviceName)) { if (controller.Status != ServiceControllerStatus.Running) { controller.Start(); controller.WaitForStatus(ServiceControllerStatus.Running, TimeSpan.FromSeconds(10)); } } } public static void StopService(string serviceName, Type serviceType) { if (!IsInstalled(serviceName)) return; using (ServiceController controller = new ServiceController(serviceName)) { if (controller.Status != ServiceControllerStatus.Stopped) { controller.Stop(); controller.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromSeconds(10)); } } } } }