public static ReturnValue CreateOrUpdate(string machineName, string impersonationUsername, string impersonationPassword, string serviceName, string displayName, string serviceLocation, StartMode startMode, string username, string password) { List <WmiService> servicesToChange = WmiService.GetAllServices(machineName, impersonationUsername, impersonationPassword, "Name = '" + serviceName + "'"); if (servicesToChange.Count > 0) { ReturnValue result; WmiService serviceToChange = servicesToChange[0]; bool requiresRestart = false; if (serviceToChange.State != State.Stopped) { requiresRestart = true; result = WmiService.Stop(machineName, impersonationUsername, impersonationPassword, serviceName); if (result != ReturnValue.Success) { throw new Exception("Failed to stop " + displayName + " on: " + machineName + ", return code: " + result.ToString()); } } object[] parameters = new object[] { displayName, // DisplayName serviceLocation, // Location Convert.ToInt32(ServiceType.OwnProcess), // ServiceType Convert.ToInt32(ErrorControl.Normal), // Error Control GetStartModeString(startMode), // Start Mode false, // Desktop Interaction username, // Username password, // Password null, // Service Order Group null, // Load Order Dependencies null // Service dependencies }; result = (ReturnValue)Convert.ToInt32(serviceToChange.WmiServiceObject.InvokeMethod("Change", parameters)); if (result != ReturnValue.Success) { throw new Exception("Failed to update " + displayName + " on: " + machineName + ", return code: " + result.ToString()); } Thread.Sleep(3000); if (requiresRestart == true) { result = WmiService.Start(machineName, impersonationUsername, impersonationPassword, serviceName); if (result != ReturnValue.Success) { throw new Exception("Failed to restart " + displayName + " on: " + machineName + ", return code: " + result.ToString()); } } return(result); } else { return(Create(machineName, impersonationUsername, impersonationPassword, serviceName, displayName, serviceLocation, startMode, username, password)); } }
public static List<WmiService> GetAllServices(string machineName, string userName, string password, string filterString) { List<WmiService> allServices = new List<WmiService>(); ManagementScope scope = WmiHelper.Connect(machineName, userName, password); // Get all app pools. SelectQuery selectQuery; //if(filterString == null || filterString == String.Empty) selectQuery = new SelectQuery(@"SELECT * FROM Win32_Service"); //else // selectQuery = new SelectQuery(string.Format(@"SELECT * FROM Win32_Service WHERE {0}", filterString)); ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, selectQuery); foreach (ManagementObject managementObject in searcher.Get()) { WmiService newService = new WmiService(); newService.WmiServiceObject = managementObject; foreach(PropertyData propertyData in managementObject.Properties) { if (propertyData.Value == null) continue; switch(propertyData.Name) { case "DesktopInteract": bool.TryParse(propertyData.Value.ToString(), out newService.DesktopInteract); break; case "DisplayName": newService.DisplayName = propertyData.Value.ToString(); break; case "ErrorControl": newService.ErrorControl = (ErrorControl)Enum.Parse(typeof(ErrorControl), propertyData.Value.ToString(), true); break; case "LoadOrderGroup": newService.LoadOrderGroup = propertyData.Value.ToString(); break; case "LoadOrderGroupDependencies": newService.LoadOrderGroupDependencies = propertyData.Value.ToString(); break; case "PathName": newService.PathName = propertyData.Value.ToString(); break; case "ServiceDependencies": newService.ServiceDependencies = propertyData.Value.ToString(); break; case "ServiceType": newService.ServiceType = (ServiceType)Enum.Parse(typeof(ServiceType), propertyData.Value.ToString().Replace(" ", ""), true); break; case "StartMode": newService.StartMode = (StartMode)Enum.Parse(typeof(StartMode), propertyData.Value.ToString(), true); break; case "StartName": newService.StartName = propertyData.Value.ToString(); break; case "StartPassword": newService.StartPassword = propertyData.Value.ToString(); break; case "AcceptPause": bool.TryParse(propertyData.Value.ToString(), out newService.AcceptPause); break; case "AcceptStop": bool.TryParse(propertyData.Value.ToString(), out newService.AcceptStop); break; case "CheckPoint": int.TryParse(propertyData.Value.ToString(), out newService.CheckPoint); break; case "CreationClassName": newService.CreationClassName = propertyData.Value.ToString(); break; case "Description": newService.Description = propertyData.Value.ToString(); break; case "ExitCode": int.TryParse(propertyData.Value.ToString(), out newService.ExitCode); break; case "InstallDate": DateTime.TryParse(propertyData.Value.ToString(), out newService.InstallDate); break; case "Name": newService.Name = propertyData.Value.ToString(); break; case "ProcessId": int.TryParse(propertyData.Value.ToString(), out newService.ProcessId); break; case "ServiceSpecificExitCode": int.TryParse(propertyData.Value.ToString(), out newService.ServiceSpecificExitCode); break; case "Started": bool.TryParse(propertyData.Value.ToString(), out newService.Started); break; case "State": newService.State = (State)Enum.Parse(typeof(State), propertyData.Value.ToString().Replace(" ", ""), true); break; case "Status": newService.Status = propertyData.Value.ToString(); break; case "SystemCreationClassName": newService.SystemCreationClassName = propertyData.Value.ToString(); break; case "SystemName": newService.SystemName = propertyData.Value.ToString(); break; case "TagId": int.TryParse(propertyData.Value.ToString(), out newService.TagId); break; case "WaitHint": int.TryParse(propertyData.Value.ToString(), out newService.WaitHint); break; } } // ensure newService is a valid instance -CT if (!string.IsNullOrEmpty(newService.DisplayName)) allServices.Add(newService); } List<WmiService> filteredServices = new List<WmiService>(); if(filterString != null && filterString != String.Empty) { DataTable allServicesDataTable = new Business.DataTableConverter.DataTableConverter<WmiService>().GetDataTable(allServices); DataView allServicesView = new DataView(allServicesDataTable); allServicesView.RowFilter = filterString; foreach (DataRowView allServicesRow in allServicesView) filteredServices.Add((WmiService) allServicesRow["OriginalSourceObject"]); } else { filteredServices = allServices; } return filteredServices; }
public static List <WmiService> GetAllServices(string machineName, string userName, string password, string filterString) { List <WmiService> allServices = new List <WmiService>(); ManagementScope scope = WmiHelper.Connect(machineName, userName, password); // Get all app pools. SelectQuery selectQuery; //if(filterString == null || filterString == String.Empty) selectQuery = new SelectQuery(@"SELECT * FROM Win32_Service"); //else // selectQuery = new SelectQuery(string.Format(@"SELECT * FROM Win32_Service WHERE {0}", filterString)); ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, selectQuery); foreach (ManagementObject managementObject in searcher.Get()) { WmiService newService = new WmiService(); newService.WmiServiceObject = managementObject; foreach (PropertyData propertyData in managementObject.Properties) { if (propertyData.Value == null) { continue; } switch (propertyData.Name) { case "DesktopInteract": bool.TryParse(propertyData.Value.ToString(), out newService.DesktopInteract); break; case "DisplayName": newService.DisplayName = propertyData.Value.ToString(); break; case "ErrorControl": newService.ErrorControl = (ErrorControl)Enum.Parse(typeof(ErrorControl), propertyData.Value.ToString(), true); break; case "LoadOrderGroup": newService.LoadOrderGroup = propertyData.Value.ToString(); break; case "LoadOrderGroupDependencies": newService.LoadOrderGroupDependencies = propertyData.Value.ToString(); break; case "PathName": newService.PathName = propertyData.Value.ToString(); break; case "ServiceDependencies": newService.ServiceDependencies = propertyData.Value.ToString(); break; case "ServiceType": newService.ServiceType = (ServiceType)Enum.Parse(typeof(ServiceType), propertyData.Value.ToString().Replace(" ", ""), true); break; case "StartMode": newService.StartMode = (StartMode)Enum.Parse(typeof(StartMode), propertyData.Value.ToString(), true); break; case "StartName": newService.StartName = propertyData.Value.ToString(); break; case "StartPassword": newService.StartPassword = propertyData.Value.ToString(); break; case "AcceptPause": bool.TryParse(propertyData.Value.ToString(), out newService.AcceptPause); break; case "AcceptStop": bool.TryParse(propertyData.Value.ToString(), out newService.AcceptStop); break; case "CheckPoint": int.TryParse(propertyData.Value.ToString(), out newService.CheckPoint); break; case "CreationClassName": newService.CreationClassName = propertyData.Value.ToString(); break; case "Description": newService.Description = propertyData.Value.ToString(); break; case "ExitCode": int.TryParse(propertyData.Value.ToString(), out newService.ExitCode); break; case "InstallDate": DateTime.TryParse(propertyData.Value.ToString(), out newService.InstallDate); break; case "Name": newService.Name = propertyData.Value.ToString(); break; case "ProcessId": int.TryParse(propertyData.Value.ToString(), out newService.ProcessId); break; case "ServiceSpecificExitCode": int.TryParse(propertyData.Value.ToString(), out newService.ServiceSpecificExitCode); break; case "Started": bool.TryParse(propertyData.Value.ToString(), out newService.Started); break; case "State": newService.State = (State)Enum.Parse(typeof(State), propertyData.Value.ToString().Replace(" ", ""), true); break; case "Status": newService.Status = propertyData.Value.ToString(); break; case "SystemCreationClassName": newService.SystemCreationClassName = propertyData.Value.ToString(); break; case "SystemName": newService.SystemName = propertyData.Value.ToString(); break; case "TagId": int.TryParse(propertyData.Value.ToString(), out newService.TagId); break; case "WaitHint": int.TryParse(propertyData.Value.ToString(), out newService.WaitHint); break; } } // ensure newService is a valid instance -CT if (!string.IsNullOrEmpty(newService.DisplayName)) { allServices.Add(newService); } } List <WmiService> filteredServices = new List <WmiService>(); if (filterString != null && filterString != String.Empty) { DataTable allServicesDataTable = new Business.DataTableConverter.DataTableConverter <WmiService>().GetDataTable(allServices); DataView allServicesView = new DataView(allServicesDataTable); allServicesView.RowFilter = filterString; foreach (DataRowView allServicesRow in allServicesView) { filteredServices.Add((WmiService)allServicesRow["OriginalSourceObject"]); } } else { filteredServices = allServices; } return(filteredServices); }