How to create a setup project for a Windows Service application in Visual C# .NET and in Visual C# 2005 (816169)
The information in this article applies to:
- Microsoft Visual C# .NET (2003)
- Microsoft Visual C# .NET (2002)
- Microsoft Visual C# 2005, Express Edition
For a Microsoft Visual Basic .NET version of this article, see 317421.
IN THIS TASKSUMMARYThis article describes how to create a setup project for
a Windows Service application (formerly named an "NT service"). To do this,
you must first create a solution that contains a simple Windows Service
project that writes an entry to its application log. You then add a setup
project to the solution to install the Window Service. Finally, you start the
service from Microsoft Visual Studio .NET or Microsoft Visual Studio 2005 Server Explorer. back to the topRequirements The following list outlines the recommended hardware,
software, network infrastructure, and service packs that you must have:
- Microsoft Windows 2000 Professional, Microsoft Windows Server 2003, Microsoft Windows 2000
Server, Microsoft Windows XP Professional, or Microsoft Windows XP Server with
Microsoft .NET Framework installed
- Microsoft Visual Studio .NET Enterprise, Microsoft Visual
Studio .NET Enterprise Architect, or Microsoft Visual Studio 2005
This article assumes that you are familiar
with Windows Services. If you are not familiar with Windows Services, see the first reference in the REFERENCES section of this article. This article also assumes
that the user account that you use to install and to run this service has the
permissions that you must have to install and to start services, and also has the permissions that you must have to access the event log. back to the top Create a Setup Project for a Windows ServiceThis section describes how to create a Windows Service
project, and how to use a compiled setup project to install the Windows Service. Create a Windows Service Project- Start Microsoft Visual Studio .NET or Microsoft Visual Studio 2005.
- On the File menu, point to
New, and then click Project.
- Click Visual C# Projects under Project Types, and then click Windows Service under Templates.
Note In Visual Studio 2005, expand Visual C# under Project Types, click Windows, and then click Windows Service under Templates. - Type
LogWriterService in the Name text box, and then type C:\ in the Location text box. Click OK.
- In Solution Explorer,
right-click Service1.cs, and then click View
Code.
- In the OnStart event handler, replace the
comments with the following code:
EventLog.WriteEntry("My simple service started."); - In Solution Explorer, double-click
Service1.cs.
- In the Code Editor window, right-click
Design View, and then click
Properties
- In the Properties pane, click the
Add Installer link.
- In the Properties pane for
ServiceInstaller1, change the ServiceName
property to Service1.
- In the Code Editor window in Design view,
click ServiceProcessInstaller1.
- In the Properties pane, change the
Account property to LocalSystem (The LocalService and NetworkService values are available only in Microsoft Windows XP).
back to the
topUse a Compiled Setup Project to Install the Windows ServiceAfter you complete the steps in the previous section to
configure the Windows Service project, follow these steps to add a deployment
project that packages the service application so that the service application
can be installed:
- Add a new project to your LogWriterService project. To do this, follow these steps:
- In Solution Explorer, right-click
Solution 'LogWriterService' (1 project), point to Add, and then click
New Project.
- Click
Setup and Deployment Projects under Project Types, and then click Setup Project under Templates.
- In the Name text box, type
ServiceSetup.
- Type
C:\ in the Location text box, and then click OK.
- Tell the deployment project what to package. To do this, follow these steps:
- In Solution Explorer, right-click
ServiceSetup, point to Add, and then click
Project Output
- In the Add Project Output Group dialog
box, in the Project box, click
LogWriterService
- Click Primary Output, and then click
OK.
- For correct installation, add only primary output. To add the custom actions, follow these steps:
- In Solution Explorer, right-click
ServiceSetup, point to View, and then click
Custom Actions
- Right-click Custom Actions, and then
click Add Custom Action.
- Click Application Folder, and then
click OK.
- Click Primary output from LogWriterService
(Active), and then click OK.
Notice that
Primary output appears under Install,
Commit, Rollback and
Uninstall.
- By default, setup projects are not included in the build configuration. To build the solution, use one of the following methods:
- Method 1
- Right-click LogWriterService, and then
click Build.
- Right-click
ServiceSetup, and then click Build.
- Method 2
- On the Build menu, click
Configuration Manager to build the whole solution.
- Click to select the Build check box
for ServiceSetup.
- Press F7 to build the whole
solution. When the solution is built, you have a complete installation package
that is available for the service.
- To install the newly built service, right-click
ServiceSetup, and then click Install.
- In the ServiceSetup dialog box, click
Next three times. Notice that a progress bar appears while the
service installs.
- When the service is installed, click
Close.
back to the
topComplete Code ListingService1.csusing System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.ServiceProcess;
namespace LogWriterService
{
public class Service1 : System.ServiceProcess.ServiceBase
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.Container components = null;
public Service1()
{
// The Windows.Forms Component Designer must have this call.
InitializeComponent();
// TODO: Add any initialization after the InitComponent call
}
// The main entry point for the process
static void Main()
{
System.ServiceProcess.ServiceBase[] ServicesToRun;
// More than one user service may run in the same process. To add
// another service to this process, change the following line to
// create a second 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>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
this.ServiceName = "Service1";
}
/// <summary>
/// Clean up any resources that are 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)
{
EventLog.WriteEntry("My simple service started.");
}
/// <summary>
/// Stop this service.
/// </summary>
protected override void OnStop()
{
// TODO: Add code here to perform any tear-down necessary to stop your service.
}
}
} back to the topVerify That It Works- In Control Panel, double-click Administrative Tools,
and then double-click Services
- Right-click Service1, and then click
Start
- Use one of the following methods to verify that an event is
logged in the event log:
- Method 1
- In Control Panel, double-click Administrative Tools,
and then double-click Event Viewer.
- Click Application
Log in the left pane, and then locate the event log for your service
from the right pane.
- Method 2
- In Server Explorer, expand
Servers, expand ComputerName, expand Event
Logs, expand Application, and then expand Service1.
Recall that Service1 is the name of the class, not the service
itself. Therefore, Service1 is used as the application name.
(It is beyond the scope of this article to explain how to customize the names.)
- Move the cursor over the log entries. The second entry from the top should read
"My simple service started".
back to the
topTroubleshootThe Framework SDK documentation states the following: The compiled
executable file that a service application project creates must be installed on
the server before the project can function in a meaningful way. You cannot
debug or run a service application by pressing F5 or F11; you cannot
immediately run a service or step into its code. Instead, you must install and start your service, and then attach a debugger to the service's process. For
more information, visit the following Microsoft Developer Network (MSDN) Web
site: back to the topREFERENCESTo create a useful Windows Service that demonstrates how to
install, how to test, and how to debug the service, visit the following
MSDN Web site: For
more information, see the following article from the December 2001 issue of
MSDN Magazine: back to the top
Modification Type: | Major | Last Reviewed: | 1/5/2006 |
---|
Keywords: | kbEventLog kbsetup kbServiceProcess kbService kbHOWTOmaster KB816169 kbAudDeveloper |
---|
|
|
©2004 Microsoft Corporation. All rights reserved.
|
|