Csharp/CSharp Tutorial/Windows/Service

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Build a service by subclassing System.ServiceProcess.ServiceBase

using System;        
using System.Collections;
using System.ruponentModel;
using System.Data;
using System.Diagnostics;
using System.ServiceProcess;
public class Service1 : System.ServiceProcess.ServiceBase
{
  private System.Diagnostics.EventLog eventLog1;

  public Service1()
  {
    this.eventLog1 = new System.Diagnostics.EventLog();
    ((System.ruponentModel.ISupportInitialize)(this.eventLog1)).BeginInit();
    this.eventLog1.Log = "MyCustomLog";
    this.eventLog1.Source = "CustomEventService2";
    this.AutoLog = false;
    this.ServiceName = "CustomEventService";
    ((System.ruponentModel.ISupportInitialize)(this.eventLog1)).EndInit();
  }
  // The main entry point for the process
  static void Main()
  {
    System.ServiceProcess.ServiceBase[] ServicesToRun;
    ServicesToRun = new System.ServiceProcess.ServiceBase[] { new Service1() };
    System.ServiceProcess.ServiceBase.Run(ServicesToRun);
  }
  protected override void OnStart(string[] args)
  {
    eventLog1.WriteEntry( "Hello", EventLogEntryType.Information );
  }
  protected override void OnStop()
  {
    eventLog1.WriteEntry( "Goodbye", EventLogEntryType.Warning );
  }
}

Implement the service interface

using System;
using System.Timers;
using System.ServiceProcess;
class MyService : ServiceBase
{
    public MyService()
    {
        ServiceName = "My Service";
        
        AutoLog = true;
        
        CanStop = true;
        CanPauseAndContinue = true;
        CanHandleSessionChangeEvent = true;
    }
    protected override void OnStart(string[] args)
    {
        EventLog.WriteEntry("MyService Service starting. ");
    }
    protected override void OnStop()
    {
        EventLog.WriteEntry("MyService Service stopping...");
    }
    protected override void OnPause()
    {
        EventLog.WriteEntry("MyService Service pausing...");
    }
    protected override void OnContinue()
    {
        EventLog.WriteEntry("MyService Service resuming...");
    }
    protected override void OnSessionChange(SessionChangeDescription change)
    {
        EventLog.WriteEntry("MyService Session change..." +
            change.Reason);
    }
    public static void Main()
    {
        ServiceBase.Run(new MyService());
    }
}

Service control: start and stop

using System;
using System.ServiceProcess;
class MainClass
{
  public static void Main() 
  {
    ServiceController scAlerter = new ServiceController("Alerter");
    Console.WriteLine(scAlerter.DisplayName);
    Console.WriteLine(scAlerter.CanStop);
    scAlerter.Stop();
    Console.WriteLine("Service stopped");
    scAlerter.Start();
    Console.WriteLine("Service started");
  }
}
Alerter
False
Unhandled Exception: System.InvalidOperationException: Cannot stop Alerter service on computer ".".
---> System.ruponentModel.Win32Exception: The service has not been started
   --- End of inner exception stack trace ---
   at System.ServiceProcess.ServiceController.Stop()
   at MainClass.Main()

Simplest service

using System;
using System.Collections;
using System.ruponentModel;
using System.Data;
using System.Diagnostics;
using System.ServiceProcess;
public class Service1 : System.ServiceProcess.ServiceBase
{
  public Service1()
  {
    this.ServiceName = "MyRealService";
  }
  static void Main()
  {
    System.ServiceProcess.ServiceBase[] ServicesToRun;
    ServicesToRun = new System.ServiceProcess.ServiceBase[] { new Service1() };
    System.ServiceProcess.ServiceBase.Run(ServicesToRun);
  }
  protected override void OnStart(string[] args)
  {
    int x = 1;
  }
  protected override void OnStop()
  {
  }
}