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()
{
}
}