C # create and install a Windows Service

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, SQL Server, and Windows
Time Service.


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

Windows service example

The following is a test case. The service name is service1 and the black part is automatically generated. The red part is the code I added and the green part is the annotation I added. This case has no other meaning, only insert records into the database.

Using system;
Using system. collections;
Using system. componentmodel;
Using system. Data;
Using system. diagnostics;
Using system. serviceprocess;
Using system. configuration. Install;
Using sysdata. dB;

Namespace servertest
{
Public class service1: system. serviceprocess. servicebase
{
Private system. Timers. Timer timer1;
/// <Summary>
/// Required designer variables.
/// </Summary>
Private system. componentmodel. Container components = NULL;

Public service1 ()
{
// This call is required by the windows. Forms component designer.
Initializecomponent ();

// Todo: add any initialization after the initcomponent call
}

// Master entry point of the process
Static void main ()
{
System. serviceprocess. servicebase [] servicestorun;
 
// Multiple user services can be run in the same process. To
// Add another service to this process. Change the downstream service.
// Create another service object. For example,
//
// Servicestorun = new system. serviceprocess. servicebase [] {New service1 (), new myseconduserservice ()};
//
Servicestorun = new system. serviceprocess. servicebase [] {New service1 ()};

System. serviceprocess. servicebase. Run (servicestorun );
}

/// <Summary>
/// The designer supports the required methods-do not use the code editor
/// Modify the content of this method.
/// </Summary>
Private void initializecomponent ()
{
This. timer1 = new system. Timers. Timer ();
(System. componentmodel. isupportinitialize) (This. timer1). begininit ();
//
// Timer1
//
This. timer1.enabled = true;
This. timer1.interval = 30000;
This. timer1.elapsed + = new system. Timers. elapsedeventhandler (this. timerw.elapsed );
//
// Service1
//
This. servicename = "service1 ";
(System. componentmodel. isupportinitialize) (This. timer1). endinit ();

}

/// <Summary>
/// Clear all resources in use.
/// </Summary>
Protected override void dispose (bool disposing)
{
If (disposing)
{
If (components! = NULL)
{
Components. Dispose ();
}
}
Base. Dispose (disposing );
}

/// <Summary>
/// Set specific operations so that the service can perform its work.
/// </Summary>
Protected override void onstart (string [] ARGs)
{
// Todo: Add code here to start the service.
This. timer1.enabled = true;
This. logmessage ("service started ");
}
 
/// <Summary>
/// Stop the service.
/// </Summary>
Protected override void onstop ()
{
// Todo: Add code here to stop the service.
This. timer1.enabled = false;
This. logmessage ("Service stopped ");
}

Private void logmessage (string xmsg)
{
Try
{
// Insert a record with the Information xmsg to the database. below is the method for adding records to the database class that I wrote in advance. You can also use other methods to write records to the database.
// DB. querysql ("insert into sysmsg (sysmsg) values ('" + xmsg + "')");
}
Catch
{
// Do not perform any operations
}
}

Private void timerincluelapsed (Object sender, system. Timers. elapsedeventargs E)
{
Logmessage ("Check service running! ");
}
}
}

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

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.
Note: Running installutil.exe directly may fail. The prompt is:
'Installutil.exe 'is not an internal or external command, or a program or batch file that can be run.
You can find this executable program in c: \ winnt \ Microsoft. NET \ framework \ v1.1.4322.
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.

---------------------------------------------------------------------
Related Article

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.