public void Modify(ServiceObject so) { so.Objects[(int)ServiceItemTypes.Status] = NativeServiceFunctions.DescribeRuntimeStatus(Status.CurrentState); so.CurrentState = Status.CurrentState; so.ControlsAccepted = Status.ControlsAccepted; so.Objects[(int)ServiceItemTypes.PID] = Status.ProcessID; so.ForegroundColor = Color.Black; if (Status.CurrentState == SC_RUNTIME_STATUS.SERVICE_RUNNING) { so.ForegroundColor = Color.Blue; } }
public ServiceProperties(ServiceObject so, ServicesController sc) { InitializeComponent(); SO = so; tbServiceName.Text = SO.ServiceName; tbDisplayName.Text = SO.DisplayName; tbDescription.Text = SO.Description; tbImagePath.Text = SO.ImagePath; cbStartupTypes.Items.Add(IDS.SERVICE_BOOT_START); cbStartupTypes.Items.Add(IDS.SERVICE_SYSTEM_START); cbStartupTypes.Items.Add(IDS.SERVICE_AUTO_START); cbStartupTypes.Items.Add(IDS.SERVICE_DEMAND_START); cbStartupTypes.Items.Add(IDS.SERVICE_DISABLED); cbStartupTypes.SelectedIndex = (int)SO.StartType; foreach (string log in sc.GetLoadOrderGroups()) { cbLoadOrderGroup.Items.Add(log); } cbLoadOrderGroup.Text = SO.LoadOrderGroup; tbPassword1.Text = INTERNAL_PASSWORD_TEXT; tbPassword2.Text = INTERNAL_PASSWORD_TEXT; if (SO.IsSystemAccount) { btSystemAccount.Checked = true; btSystemAccount_Click(null, null); } else { btThisAccount.Checked = true; tbAccountName.Text = SO.ServiceStartName; btThisAccount_Click(null, null); } if ((SO.ServiceType & SC_SERVICE_TYPE.SERVICE_INTERACTIVE_PROCESS) != 0) { btInteractWithDesktop.Checked = true; } }
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"); } }
private void StatusMessage(ServiceObject so, SC_RUNTIME_STATUS state) { if (so != null) { stServiceName.Text = so.GetText((int)ServiceItemTypes.DisplayName); stOldStatus.Text = NativeServiceFunctions.DescribeRuntimeStatus(so.CurrentState); } stNewStatus.Text = NativeServiceFunctions.DescribeRuntimeStatus(state); }
public void Refresh(List<IServiceObject> Services, IntPtr lpServices, int ServicesReturned) { int iPtr = lpServices.ToInt32(); for (int i = 0; i < ServicesReturned; i++) { ENUM_SERVICE_STATUS_PROCESS essp = (ENUM_SERVICE_STATUS_PROCESS) Marshal.PtrToStructure( new IntPtr(iPtr), typeof(ENUM_SERVICE_STATUS_PROCESS)); ServiceObject so = new ServiceObject(); Services.Add(so); so.Objects[(int)ServiceItemTypes.DisplayName] = essp.DisplayName; so.Objects[(int)ServiceItemTypes.ServiceName] = essp.ServiceName; so.Objects[(int)ServiceItemTypes.Status] = NativeServiceFunctions.DescribeRuntimeStatus(essp.CurrentState); so.CurrentState = essp.CurrentState; so.ControlsAccepted = essp.ControlsAccepted; so.Objects[(int)ServiceItemTypes.Type] = ServiceObject.DescribeServiceType(essp.ServiceType); so.Objects[(int)ServiceItemTypes.PID] = essp.ProcessID; if (essp.CurrentState == SC_RUNTIME_STATUS.SERVICE_RUNNING) { so.ForegroundColor = Color.Blue; } so.RefreshConfig(this); iPtr += Marshal.SizeOf(essp); } }
private void ApplySpecificAction(ServiceObject so, SC_START_TYPE st) { }
private void ApplyDefaultAction(ServiceObject so) { ApplySpecificAction(so, DefaultStartTypes[cbDefaultAction.SelectedIndex]); }