public bool Request(ServiceStatus ss)
 {
     return ss.Control(SC_CONTROL_CODE.SERVICE_CONTROL_CONTINUE);
 }
 public bool Request(ServiceStatus ss)
 {
     return ss.Start();
 }
        private void backgroundWorker1_Process(NativeService ns, ServiceObject so)
        {
            bool requestedStatusChange = false;

            Trace.TraceInformation("BEGIN backgroundWorker1_Process for {0}", ns.Description);

            using (ServiceStatus ss = new ServiceStatus(ns))
            {
                for (int i = 0; i < 100; ++i)
                {
                    if (bCancelled)
                        break;

                    double RelativePercentage = (PercentPerService * (double)i) / 10.0;
                    double Percentage = CurrentPercentage + RelativePercentage;

                    int p = (int)Percentage;
                    if (p >= 100)
                        p = 99;
                    backgroundWorker1.ReportProgress(p);

                    if (!ss.Refresh())
                        break;

                    Trace.TraceInformation("Refresh #{0}: Status is {1}", i, ss.Status.CurrentState);
                    Invoke(new StatusMessageDelegate(StatusMessage), null, ss.Status.CurrentState);
                    if (SSR.HasSuccess(ss.Status.CurrentState))
                    {
                        Trace.WriteLine("Reached target status, done...");
                        break; // TODO: reached 100% of this service' status reqs.
                    }

                    // if we haven't asked the service to change its status yet, do so now.
                    if (!requestedStatusChange)
                    {
                        requestedStatusChange = true;
                        Trace.TraceInformation("Ask {0} to issue its status request on {1}", SSR, ss);
                        if (!SSR.Request(ss))
                            break;
                    }
                    else if (SSR.HasFailed(ss.Status.CurrentState))
                    {
                        Trace.TraceInformation("ERROR, target state is one of the failed ones :(");
                        break;
                    }
                    Thread.Sleep(500);
                }
                ss.Modify(so);
                Trace.TraceInformation("END backgroundWorker1_Process");
            }
        }
 public bool Request(ServiceStatus ss)
 {
     SS = ss;
     HasBeenAskedToStart = false;
     return ss.Control(SC_CONTROL_CODE.SERVICE_CONTROL_STOP);
 }