Csharp/CSharp Tutorial/Windows/Service

Материал из .Net Framework эксперт
Версия от 15:20, 26 мая 2010; Admin (обсуждение | вклад) (1 версия)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Build a service by subclassing System.ServiceProcess.ServiceBase

<source lang="csharp">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 );
 }

}</source>

Implement the service interface

<source lang="csharp">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());
   }

}</source>

Service control: start and stop

<source lang="csharp">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");
 }

}</source>

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

<source lang="csharp">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()
 {
 }

}</source>