用C#创建Windows Service

简介:
   现在的 .NET 框架已经为 Windows service 的开发提供足够强大的支持 , 你只需要关注 service 所要实现的逻辑 , 而完全不用关心 service 底层是如何实现的 , 相比以前用 MFC 来说 , 真是质的飞跃啊。闲话少谈,看看如何实现一个最基本的 windows service ,以及如何来调试 windows service
       打开 VS 2005 ,点击 File->New->Project…., 在创建工程向导中选择 Windows service 模板,如下图所示:
      

在工程名输入框中,输入TestService然后点击OKVS为我们生成了最基本的代码,我们将Service的名称改为我们期望的名称,在solution explorer中右键点击vs自动生成的service文件“Service1.cs,在弹出的菜单中选择Rename,输入“MyFirstService”,然后切换到设计视图,也就是在solution explorer中双击MyfirstService.cs,在Property Explorer中将ServiceName属性改为MyFirstService,这时一个可运行的windows service已经创建成功。我们添加一些代码来测试一下这个service,最简单的测试方式就是向windows event log里来添加一些消息以显示我们的Service的状态。 
   我们需要一个EventLog组件向windows log中添加信息,在solution explorer中双击MyfirstSerice文件切换到设计视图,将工具箱中的EventLog组件拖到设计视图中,我们保留EventLog组件的默认名称eventLog1。选中eventLog1,在property explorer中将Log属性选为Application,在Source属性中输入“MyFirstService”。接下来,我们在设计视图的空白处,右键点击,并选择View Code切换到代码视图,在OnStartOnStop方法里输入代码实现日志写入,代码如下:
   
   

using  System;
using  System.Collections.Generic;
using  System.ComponentModel;
using  System.Data;
using  System.Diagnostics;
using  System.ServiceProcess;
using  System.Text;

namespace  TestService
{
    
public partial class MyFirstService : ServiceBase
    
{
        
public MyFirstService()
        
{
            InitializeComponent();
        }


        
protected override void OnStart(string[] args)
        
{
            
// TODO: Add code here to start your service.
            eventLog1.WriteEntry("Service start");
        }


        
protected override void OnStop()
        
{
            
// TODO: Add code here to perform any tear-down necessary to stop your service.
            eventLog1.WriteEntry("Service stop");
        }

    }

}


   要运行这个service我们还要做下边的几个步骤:
   1.为我们的Service添加Installer,右键点击设计视图,选择Add InstallerVS将会为我们添加ProjectInstaller.cs,并在ProjectInstaller中添加组件serviceInstaller1serviceProcessInstaller1,现在我们来修改他们的属性来控制Service的安装和启动选项。在ProjectInstaller得设计视图中选中serviceProcessInstaller1,将它得Account属性选为LocalSystem,这样以这个帐号服务启动。如果你希望系统启动时自动启动服务得话,将serviceInstaller1StartType的属性选为Automatic,如果手动启动的话,选为manaul
   2.安装service,我们要用到IntallUtil.exe这个程序,这个程序位于C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727。点击开始菜单,选择“运行”,在运行对话框中输入cmd,进入到命令行窗口,输入cd :\WINDOWS\Microsoft.NET\Framework\v2.0.50727,进入到这个目录,然后输入installutil F:\Programs\C#\TestService\TestService\bin\Debug\testserveice.exe, installutil后边的内容就是我们的工程生成的可执行程序的路径,情根据需要修改。
   如果你给ServiceInstaller1StartType设为Automatic的话,安装完服务,服务已经运行起来了,如果StartTypeManual的话,你需要手动启动。现在我们进入“服务”,要打开服务,请单击开始,指向设置,然后单击控制面板。依次单击性能和维护管理工具,然后双击服务。在里边你应该能够看到我们制作的Service MyFirstService。在这里边,我们可以启动,关闭服务,还可以设置服务的启动类型。然后,我们看看服务有没有正确的写入日志,我们需要进入到事件查看器,要打开事件查看器,请单击开始,指向设置,然后单击控制面板。单击性能和维护,单击管理工具,然后双击事件查看器。如下图所示,我们的消息已经成功的写到了系统日志里了。
   
   如果你不需要这个Service了,仍然使用InstallUtil这个程序来卸载,不过在InstallUtil后跟参数 –u,比如installutil –u F:\Programs\C#\TestService\TestService\bin\Debug\testserveice.exe
   Service的调试方法与普通的程序调试方法是不一样的。我来介绍一下。
   1.          Build你的项目
   2.          设置断点,因为我们的Service非常的简单,没有什么执行逻辑,所以设置断点没有任何意义,大家可以自己写一些代码来实践。一般来说,我们服务里需要用到一个另外的线程来执行任务,你需要在线程的执行代码中来设置断点。
 
3.          安装service,我们前边有介绍如何安装。
  4.          如果你的Service启动类型是手动(Manual),你需要到“服务”里启动你的Service。一般来说,如果你的service在开发阶段,我推荐你将Service的启动类型设置为Manual,这样便于调试,因为如果service在运行过程中,你将无法build工程。   
  5.          
VS中,从菜单中选择Debug->Attach Process….,将会出现下图:

里边列出了正在运行的进程,如果你找不到自己的
service,请选中Show processes from all users。在Available processes列表中选中我们的service所在的进程TestService,然后点击Attach按钮,如果你设置的断点合理的话,那么,程序就会停在断点处,接下来你就可以进行调试了。






本文转自纶巾客博客园博客,原文链接:http://www.cnblogs.com/guanjinke/archive/2006/12/01/578399.html,如需转载请自行联系原作者
目录
相关文章
|
1月前
|
安全 Windows
【Azure Cloud Service】在Windows系统中抓取网络包 ( 不需要另外安全抓包工具)
通常,在生产环境中,为了保证系统环境的安全和纯粹,是不建议安装其它软件或排查工具(如果可以安装,也是需要走审批流程)。 本文将介绍一种,不用安装Wireshark / tcpdump 等工具,使用Windows系统自带的 netsh trace 命令来获取网络包的步骤
71 32
|
1月前
|
C# Windows
【Azure App Service】在App Service for Windows上验证能占用的内存最大值
根据以上测验,当使用App Service内存没有达到预期的值,且应用异常日志出现OutOfMemory时,就需要检查Platform的设置是否位64bit。
44 11
|
2月前
|
C# 开发工具 Windows
C# 获取Windows系统信息以及CPU、内存和磁盘使用情况
C# 获取Windows系统信息以及CPU、内存和磁盘使用情况
73 0
|
2月前
|
数据可视化 程序员 C#
C#中windows应用窗体程序的输入输出方法实例
C#中windows应用窗体程序的输入输出方法实例
56 0
|
2月前
|
安全 API C#
C# 如何让程序后台进程不被Windows任务管理器强制结束
C# 如何让程序后台进程不被Windows任务管理器强制结束
79 0
|
4月前
|
Java 应用服务中间件 开发工具
[App Service for Windows]通过 KUDU 查看 Tomcat 配置信息
[App Service for Windows]通过 KUDU 查看 Tomcat 配置信息
|
4月前
|
Java 应用服务中间件 Windows
【App Service for Windows】为 App Service 配置自定义 Tomcat 环境
【App Service for Windows】为 App Service 配置自定义 Tomcat 环境
|
4月前
|
PHP Windows
【Azure App Service for Windows】 PHP应用出现500 : The page cannot be displayed because an internal server error has occurred. 错误
【Azure App Service for Windows】 PHP应用出现500 : The page cannot be displayed because an internal server error has occurred. 错误
|
3月前
|
关系型数据库 数据库 PostgreSQL
在C#中获取与设置Windows的字符编码方式
通过以上步骤,你可以在Docker环境下有效地重启PostgreSQL服务。这对于维护数据库健康、应用更新或环境配置更改后确保数据库服务正常运行至关重要。根据你的具体需求和环境设置,选择合适的方法来执行重启操作。
22 0
|
4月前
|
网络安全 API 数据安全/隐私保护
【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service Windows)
【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service Windows)