/// <summary>
 /// Uninstalls the service from the system.
 /// </summary>
 /// <param name="svcInfo">The service information object. Name property is used</param>
 /// <returns></returns>
 public ReturnValue UninstallService(ServiceInfo service)
 {
     ManagementObject svc = service.ManagementObject() ?? GetService(service.Name);
     return InvokeMethod(svc, "delete");
 }
 /// <summary>
 /// Stops the service.
 /// </summary>
 /// <param name="service">The service information object. Name property is used</param>
 /// <returns></returns>
 public ReturnValue StopService(ServiceInfo service)
 {
     ManagementObject svc = service.ManagementObject() ?? GetService(service.Name);
     return InvokeMethod(svc, "StopService");
 }
        /// <summary>
        /// Changes the specified service username, password or path.
        /// </summary>
        /// <param name="service">The service to update.</param>
        /// <returns></returns>
        public ReturnValue Change(ServiceInfo service)
        {
            if (!string.IsNullOrWhiteSpace(service.Password) && !Security.IsValidLogin(service.Username, service.Password, Server))
                return ReturnValue.ServiceLogonFailure;
            //ensure user account has logon as service rights
            Security.SetLogonAsAService(service.Username, Server);
            ManagementObject svc = service.ManagementObject() ?? GetService(service.Name);
            ManagementClass mc = ScopedClass("Win32_Service");
            mc.Scope = Scope();

            ManagementBaseObject inParams = mc.GetMethodParameters("Change");
            if (!string.IsNullOrWhiteSpace(service.Password))
            {
                inParams["StartName"] = service.Username;
                inParams["StartPassword"] = service.Password;
            }
            inParams["PathName"] = service.PathName;

            return InvokeMethod(svc, "Change", inParams);

        }