How to create, install, and debug Windows Services

Source: Internet
Author: User
Tags net command

 

We will study how to create an application as a Windows service. The content includes what is a Windows service and how to create, install, and debug them. The System. ServiceProcess. ServiceBase namespace class is used.

 

What is a Windows service?

 

Windows service applications are applications that require long-term running. They are especially suitable for server environments. It does not have a user interface and does not produce any visual output. Any user message is written into the Windows event log. When the computer starts, the service automatically starts running. They do not run only when users log on. They can run in any user environment including the system. Through the Service Control Manager, Windows Services are controllable and can be terminated, paused, and started as needed.

Windows Services, formerly NT services, are introduced as part of the Windows NT operating system. They are not in Windows 9x or Windows Me. You need to use an NT-level operating system to run Windows Services, such as Windows NT, Windows 2000 Professional, or Windows 2000 Server. For example, products in the form of Windows Services include Microsoft Exchange and SQL Server, and Windows Time services such as computer clock settings.

 

Create a Windows Service

The service we are about to create does nothing except demonstration. When the service is started, an entry is registered to a database to indicate that the service has been started. During service running, it regularly creates a database project record at a specified interval. When the service is stopped, the last database record is created. This service automatically registers with the Windows Application log the records when it is successfully started or stopped.

Visual Studio. NET makes creating a Windows Service quite simple. The following describes how to start the demo service program.

1. Create a project

2. Select a Windows service from the list of available project templates

3. The designer opens in design mode.

4. Drag a Timer object from the component table in the toolbox to the design surface (Note: Make sure that Timer is used from the component list rather than from the Windows form List)

5. Set the Timer attribute. The Enabled attribute is False, and the Interval attribute is 30000 milliseconds.

6. Switch to the Code view page (Press F7 or select code from the View menu) and fill in the function for this service.

 

Composition of Windows Services

In the code behind your class, you will notice that the Windows Service you created expands the System. ServiceProcess. Service class. All Windows Services created in. NET mode must expand this class. It requires your service to reload the following methods. Visual Studio includes these methods by default.

• Dispose-clear any managed and unmanaged resources)

• OnStart-Control Service Startup

• OnStop-Control Service stop

Database Table script sample

The database tables used in this example are created using the following T-SQL script. Select the SQL Server database. You can easily modify this example so that it can run in Access or any database you choose.

Create table [dbo]. [MyServiceLog] (

[In_LogId] [int] IDENTITY (1, 1) not null,

[Vc_Status] [nvarchar] (40)

COLLATE SQL _Latin1_General_CP1_CI_AS NOT NULL,

[Dt_Created] [datetime] NOT NULL

) ON [PRIMARY]

 

Windows service example

The following is all the source code of the Windows service named MyService. Most source code is automatically generated by Visual Studio.

 

Code

Using System;

Using System. Collections;

Using System. ComponentModel;

Using System. Data;

Using System. Data. SqlClient;

Using System. Diagnostics;

Using System. ServiceProcess;

Namespace CodeGuru. MyWindowsService

{

Public class MyService: System. ServiceProcess. ServiceBase

{

Private System. Timers. Timer timer1;

/// <Remarks>

/// Required designer variable.

/// </Remarks>

Private System. ComponentModel. Container components = null;

Public MyService ()

{

// This call is required by the Windows. Forms

// Component Designer.

InitializeComponent ();

}

// The main entry point for the process

Static void Main ()

{

System. ServiceProcess. ServiceBase [] ServicesToRun;

 

ServicesToRun = new System. ServiceProcess. ServiceBase []

{New MyService ()};

System. ServiceProcess. ServiceBase. Run (ServicesToRun );

}

/// <Summary>

/// Required method for Designer support-do not modify

/// The contents of this method with the code editor.

/// </Summary>

Private void InitializeComponent ()

{

This. timer1 = new System. Timers. Timer ();

(System. ComponentModel. ISupportInitialize)

(This. timer1). BeginInit ();

//

// Timer1

//

This. timer1.Interval = 30000;

This. timer1.Elapsed + =

New System. Timers. ElapsedEventHandler (this. timer1_Elapsed );

//

// MyService

//

This. ServiceName = "My Sample Service ";

(System. ComponentModel. ISupportInitialize)

(This. timer1). EndInit ();

}

/// <Summary>

/// Clean up any resources being used.

/// </Summary>

Protected override void Dispose (bool disposing)

{

If (disposing)

{

If (components! = Null)

{

Components. Dispose ();

}

}

Base. Dispose (disposing );

}

/// <Summary>

/// Set things in motion so your service can do its work.

/// </Summary>

Protected override void OnStart (string [] args)

{

This. timer1.Enabled = true;

This. LogMessage ("Service Started ");

}

 

/// <Summary>

/// Stop this service.

/// </Summary>

Protected override void OnStop ()

{

This. timer1.Enabled = false;

This. LogMessage ("Service Stopped ");

}

/*

* Respond to the Elapsed event of the timer control

*/

Private void timer1_Elapsed (object sender,

System. Timers. ElapsedEventArgs e)

{

This. LogMessage ("Service Running ");

}

/*

* Log specified message to database

*/

Private void LogMessage (string Message)

{

SqlConnection connection = null;

SqlCommand command = null;

Try

{

Connection = new SqlConnection (

"Server = localhost; Database = SampleDatabase; Integrated

Security = false; User Id = sa; Password = ;");

Command = new SqlCommand (

"Insert into MyServiceLog (vc_Status, dt_Created)

VALUES ('"+ Message +"', getdate () ", connection );

Connection. Open ();

Int numrows = command. ExecuteNonQuery ();

}

Catch (Exception ex)

{

System. Diagnostics. Debug. WriteLine (ex. Message );

}

Finally

{

Command. Dispose ();

Connection. Dispose ();

}

}

}

}

 

 

 

 

Install Windows Services

Windows Services are different from common Windows applications. It is impossible to simply start the Windows service by running an EXE. To install a Windows service, you must use installutil.exe of. NET framework.exe, or use a file deployment project such as Microsoft Installer (MSI.

 

Add service Installer

It is not enough to create a Windows Service and only use the InstallUtil program to install the service. You must add a service installer to your Windows Service so that InstallUtil or any other installer can know how your service is configured.

1. Switch the service program to the design view.

2. Right-click the design view and select "add installer"

3. Switch to the design view of the newly added ProjectInstaller.

4. Set the attributes of the serviceInstaller1 component:

1) ServiceName = My Sample Service

2) StartType = Automatic

5. Set the attributes of the serviceProcessInstaller1 component

1) Account = LocalSystem

6. Generate a solution

After completing the preceding steps, Visual Studio automatically generates the following source code, which is included in the source file ProjectInstaller. cs.

 

Code

Using System;

Using System. Collections;

Using System. ComponentModel;

Using System. Configuration. Install;

Namespace CodeGuru. MyWindowsService

{

/// <Summary>

/// Summary description for ProjectInstaller.

/// </Summary>

[RunInstaller (true)]

Public class ProjectInstaller:

System. Configuration. Install. Installer

{

Private System. ServiceProcess. ServiceProcessInstaller

ServiceProcessInstaller1;

Private System. ServiceProcess. ServiceInstaller serviceInstaller1;

/// <Summary>

/// Required designer variable.

/// </Summary>

Private System. ComponentModel. Container components = null;

Public ProjectInstaller ()

{

// This call is required by the Designer.

InitializeComponent ();

// TODO: Add any initialization after the InitComponent call

}

# Region Component Designer generated code

/// <Summary>

/// Required method for Designer support-do not modify

/// The contents of this method with the code editor.

/// </Summary>

Private void InitializeComponent ()

{

This. serviceProcessInstaller1 = new

System. ServiceProcess. ServiceProcessInstaller ();

This. serviceInstaller1 = new

System. ServiceProcess. ServiceInstaller ();

//

// ServiceProcessInstaller1

//

This. serviceProcessInstaller1.Account =

System. ServiceProcess. ServiceAccount. LocalSystem;

This. serviceProcessInstaller1.Password = null;

This. serviceProcessInstaller1.Username = null;

//

// ServiceInstaller1

//

This. serviceInstaller1.ServiceName = "My Sample Service ";

This. serviceInstaller1.StartType =

System. ServiceProcess. ServiceStartMode. Automatic;

//

// ProjectInstaller

//

This. Installers. AddRange (new

System. Configuration. Install. Installer []

{This. serviceProcessInstaller1, this. serviceInstaller1 });

}

# Endregion

}

}

 

 

 

 

Install Windows Services with InstallUtil

Now that this service has been generated, you need to install it to use it. The following operations will guide you to install your new service.

1. Prompt for opening the Visual Studio. NET command

2. Change the path to the bin \ Debug folder of your project (if you compile in Release mode, in the bin \ Release folder)

3. Execute the command "installutil.exe MyWindowsService.exe" to register this service and create an appropriate registration item.

4. Right-click "my computer" on the desktop and select "manage" to access the computer management console.

5. In the "services" section of "services and applications", you can find that your Windows services are included in the Service list.

6. Right-click your service and choose start to start your service.

Every time you need to modify the Windows Service, this requires you to uninstall and reinstall the service. However, it is a good habit to ensure that the service management console is closed before you uninstall the service. If this is not the case, you may encounter problems when uninstalling and re-installing Windows Services. If you only uninstall the service, you can run the InstallUtil command to log out of the service. However, you need to add a/u command to the end.

 

Debug Windows Services

From another perspective, debugging Windows Services is totally different from a common application. More steps are required to debug Windows Services. Services cannot be debugged as long as they are simply executed in the development environment as you do for common applications. The service must be installed and started first. We have done this in the previous section. To facilitate code tracing and debugging, once the service is started, you must use Visual Studio to append the running process (attach ). Remember, any modifications made to your Windows service must be uninstalled and reinstalled.

 

Append a running Windows Service

To debug the program, some operating instructions for the Windows Service are attached. These operations assume that you have installed the Windows service and it is running.

1. Use Visual Studio to load this project

2. Click the "debug" menu

3. Click the process menu.

4. Ensure that the system process is selected

5. In the list of available processes, locate the process on your Executable File Name and click to select it

6. Click the Add button.

7. Click OK.

8. Click Close.

9. Set a breakpoint in the timerreceivelapsed method and wait for it to execute

 

Summary

Now you should have a rough understanding of what Windows Services are and how to create, install, and debug them. You can study the functions of Windows Services on your own. These functions include OnPause and OnContinue. The pause and resume capabilities are not enabled by default. You must set them through Windows Service properties.

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.