• ServicesController 的使用


    using System;
    using System.ServiceProcess;
    using System.Diagnostics;
    using System.Threading;
    
    namespace ServiceControllerSample
    {
        class Program
        {
            public enum SimpleServiceCustomCommands
            { StopWorker = 128, RestartWorker, CheckWorker };
            static void Main(string[] args)
            {
                ServiceController[] scServices;
                scServices = ServiceController.GetServices();
    
                foreach (ServiceController scTemp in scServices)
                {
    
                    if (scTemp.ServiceName == "Simple Service")
                    {
                        // Display properties for the Simple Service sample
                        // from the ServiceBase example.
                        ServiceController sc = new ServiceController("Simple Service");
                        Console.WriteLine("Status = " + sc.Status);
                        Console.WriteLine("Can Pause and Continue = " + sc.CanPauseAndContinue);
                        Console.WriteLine("Can ShutDown = " + sc.CanShutdown);
                        Console.WriteLine("Can Stop = " + sc.CanStop);
                        if (sc.Status == ServiceControllerStatus.Stopped)
                        {
                            sc.Start();
                            while (sc.Status == ServiceControllerStatus.Stopped)
                            {
                                Thread.Sleep(1000);
                                sc.Refresh();
                            }
                        }
                        // Issue custom commands to the service
                        // enum SimpleServiceCustomCommands 
                        //    { StopWorker = 128, RestartWorker, CheckWorker };
                        sc.ExecuteCommand((int)SimpleServiceCustomCommands.StopWorker);
                        sc.ExecuteCommand((int)SimpleServiceCustomCommands.RestartWorker);
                        sc.Pause();
                        while (sc.Status != ServiceControllerStatus.Paused)
                        {
                            Thread.Sleep(1000);
                            sc.Refresh();
                        }
                        Console.WriteLine("Status = " + sc.Status);
                        sc.Continue();
                        while (sc.Status == ServiceControllerStatus.Paused)
                        {
                            Thread.Sleep(1000);
                            sc.Refresh();
                        }
                        Console.WriteLine("Status = " + sc.Status);
                        sc.Stop();
                        while (sc.Status != ServiceControllerStatus.Stopped)
                        {
                            Thread.Sleep(1000);
                            sc.Refresh();
                        }
                        Console.WriteLine("Status = " + sc.Status);
                        String[] argArray = new string[] { "ServiceController arg1", "ServiceController arg2" };
                        sc.Start(argArray);
                        while (sc.Status == ServiceControllerStatus.Stopped)
                        {
                            Thread.Sleep(1000);
                            sc.Refresh();
                        }
                        Console.WriteLine("Status = " + sc.Status);
                        // Display the event log entries for the custom commands
                        // and the start arguments.
                        EventLog el = new EventLog("Application");
                        EventLogEntryCollection elec = el.Entries;
                        foreach (EventLogEntry ele in elec)
                        {
                            if (ele.Source.IndexOf("SimpleService.OnCustomCommand") >= 0 |
                                ele.Source.IndexOf("SimpleService.Arguments") >= 0)
                                Console.WriteLine(ele.Message);
                        }
                    }
                }
    
    
            }
        }
    }
    // This sample displays the following output if the Simple Service
    // sample is running:
    //Status = Running
    //Can Pause and Continue = True
    //Can ShutDown = True
    //Can Stop = True
    //Status = Paused
    //Status = Running
    //Status = Stopped
    //Status = Running
    //4:14:49 PM - Custom command received: 128
    //4:14:49 PM - Custom command received: 129
    //ServiceController arg1
    //ServiceController arg2
    

    以上代码转自msdn:http://msdn.microsoft.com/zh-cn/library/system.serviceprocess.servicecontroller(v=vs.110).aspx

    今天自己调试了一个ServicesController ,本来一个停止服务由于没有刷新,始终在一个状态下

     while (sc.Status != ServiceControllerStatus.Stopped)
                        {
                            Thread.Sleep(1000);
                            
                        }
    

      如果是怎么写的话,状态会一直在Stoppending

    需要加入一句sc.Refresh();

     while (sc.Status != ServiceControllerStatus.Stopped)
                        {
                            Thread.Sleep(1000);
                            sc.Refresh();
                        }
    
    
  • 相关阅读:
    go语言基础之安装go开发环境和beego
    mysql之事件的开启和调用
    系统和应用监控指标
    常用的17个运维监控系统(必备知识)
    Kafka Java API操作topic
    Linux安装mysql8.0
    mybatis+Oracle 批量插入数据,有数据做更新操作
    ORACLE数据库导出表,字段名,长度,类型,字段注释,表注释语句
    ORACLE 按时间创建分区表
    oracle创建表空间和用户
  • 原文地址:https://www.cnblogs.com/crazycxy/p/3753254.html
Copyright © 2020-2023  润新知