Beispiel #1
0
        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;
        }
Beispiel #3
0
        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);
        }