コード例 #1
0
ファイル: ServiceStatus.cs プロジェクト: k4gdw/GSharpTools
        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;
            }
        }
コード例 #2
0
        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;
            }
        }
コード例 #3
0
        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");
            }
        }
コード例 #4
0
 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);
 }
コード例 #5
0
ファイル: NativeSCManager.cs プロジェクト: k4gdw/GSharpTools
        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);
            }
        }
コード例 #6
0
ファイル: ApplyTemplate.cs プロジェクト: zippy1981/GTools
 private void ApplySpecificAction(ServiceObject so, SC_START_TYPE st)
 {
 }
コード例 #7
0
ファイル: ApplyTemplate.cs プロジェクト: zippy1981/GTools
 private void ApplyDefaultAction(ServiceObject so)
 {
     ApplySpecificAction(so, DefaultStartTypes[cbDefaultAction.SelectedIndex]);
 }