### C#中编写Windows服务程序详解
#### 一、引言
Windows服务程序是一种后台运行的应用程序,可以在没有用户交互的情况下执行特定任务。这类程序通常用于执行系统监控、数据同步等长时间运行的任务。使用C#编写Windows服务程序,可以利用.NET Framework的强大功能,实现更加高效且稳定的服务程序。
#### 二、创建Windows服务程序步骤
本节将详细介绍如何在Visual Studio .NET 2003中创建并配置一个简单的Windows服务程序。
##### 1. 创建新的服务项目
- 打开Visual Studio .NET 2003。
- 选择“文件” > “新建” > “项目”。
- 在新建项目对话框中,选择“Windows 服务”模板。
- 输入项目的名称(例如:WinSrv_A),然后点击“确定”。
##### 2. 配置服务基本信息
- 在解决方案资源管理器中找到`Service1.cs`文件。
- 右键点击该文件并选择“查看代码”或直接双击打开。
- 修改`Service1.cs`中的`ServiceName`属性为你希望的服务名称。
- 示例代码:
```csharp
public partial class Service1 : ServiceBase
{
public Service1()
{
InitializeComponent();
this.ServiceName = "MyNewService"; // 修改此处的服务名称
}
}
```
- 在服务管理器中可以看到修改后的服务名称。
##### 3. 编写启动与停止逻辑
- `OnStart` 和 `OnStop` 方法是在服务启动和停止时被调用的关键方法。
- 示例代码:
```csharp
protected override void OnStart(string[] args)
{
string s = System.DateTime.Now.ToString();
string logFilePath = @"c:\srvlog.txt";
if (!File.Exists(logFilePath))
{
using (StreamWriter sr = File.CreateText(logFilePath))
{
sr.WriteLine("-------------------------STARTSRV---------------------");
sr.WriteLine("我的新服务在{0}时间开始", s);
sr.WriteLine("我可以写整型{0}or浮点型{1},等等.", 1, 4.2);
}
}
else
{
using (StreamWriter sr = File.AppendText(logFilePath))
{
sr.WriteLine("-------------------------STARTSRV---------------------");
sr.WriteLine("我的新服务在{0}时间开始", s);
sr.WriteLine("我可以写整型{0}or浮点型{1},等等.", 1, 4.2);
}
}
}
protected override void OnStop()
{
string s1 = System.DateTime.Now.ToString();
string logFilePath = @"c:\srvlog.txt";
if (!File.Exists(logFilePath))
{
using (StreamWriter sr = File.CreateText(logFilePath))
{
sr.WriteLine("-------------------------STOPSRV---------------------");
sr.WriteLine("我的新服务在{0}时间停止", s1);
}
}
else
{
using (StreamWriter sr = File.AppendText(logFilePath))
{
sr.WriteLine("-------------------------STOPSRV---------------------");
sr.WriteLine("我的新服务在{0}时间停止", s1);
}
}
}
```
##### 4. 添加安装程序组件
- 返回到设计视图。
- 在`Service1.cs`的设计视图中,右键点击空白处选择“添加” > “安装程序”。
- 这将自动生成`serviceInstaller1`和`serviceProcessInstaller1`两个组件。
- 设置`serviceInstaller1`的`ServiceName`属性为你之前定义的服务名称。
- 设置`serviceInstaller1`的`StartType`属性为`Automatic`。
- 设置`serviceProcessInstaller1`的`Account`属性为`LocalSystem`。
##### 5. 编译并安装服务
- 编译项目。
- 使用.NET Framework提供的工具`InstallUtil.exe`来安装服务程序。
- 打开命令提示符,输入以下命令:
```cmd
InstallUtil.exe path\to\your\bin\Debug\WinSrv_A.exe
```
#### 三、小结
通过上述步骤,我们可以成功地创建一个能够在Windows环境中作为服务运行的简单程序。这种类型的服务程序非常适合于那些需要长时间运行且无需用户交互的任务。掌握了这些基本步骤之后,可以根据具体需求进一步扩展和完善服务程序的功能。