欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

c#创建windows服务入门教程实例

程序员文章站 2024-02-22 20:01:46
用c#中创建一个windows服务非常简单,与windows服务相关的类都在system.serviceprocess命名空间下。 每个服务都需要继承自serviceba...

用c#中创建一个windows服务非常简单,与windows服务相关的类都在system.serviceprocess命名空间下。

每个服务都需要继承自servicebase类,并重写相应的启动、暂停、停止等方法。

windows服务的相关信息是存放与注册表中的,所以他可以在不需要用户登录的情况下自动运行,在c#中你不需要再直接向注册表中添加信息了,c#提供了服务安装类 serviceprocessinstaller和serviceinstaller来实现服务的安装。

首先,用vs创建一个windows服务项目

c#创建windows服务入门教程实例

成功后你可以看到

c#创建windows服务入门教程实例

program中只包含服务运行的相关信息

复制代码 代码如下:

/// <summary>
/// 应用程序的主入口点。
/// </summary>
static void main()
{
servicebase[] servicestorun;
servicestorun = new servicebase[]
{
new service1()//这里是一个数组,意味着我们可以在一个服务进程中创建多个服务实例,只需要在这里加上即可
};
servicebase.run(servicestorun);
}

service1.cs就是我们需要的服务类,与windows服务相关的基本操作大都可以在这里找到,如:start,stop,pause,continue等,我们要做的就是根据这些操作做不同的处理就可以了。

我们先在服务start和stop时分别记录一条信息到d盘

复制代码 代码如下:

protected override void onstart(string[] args)
{
file.appendalltext("d:" + this.gettype().name + ".txt", datetime.now.tostring("yyyy-mm-dd hh:mm:ss 服务启动"));
}
protected override void onstop()
{
file.appendalltext("d:" + this.gettype().name + ".txt", datetime.now.tostring("yyyy-mm-dd hh:mm:ss 服务停止"));
}

一个简单的服务就完成了,下一步添加安装信息

双击项目中的service.cs转到服务设计界面,在空白处右键选择“添加安装程序”

c#创建windows服务入门教程实例

vs会自动创建一个默认名称为projectinstaller.cs的文件并转到相应的设计界面

默认添加两个类 serviceprocessinstaller1和serviceinstaller1,第一个主要用来设置服务所属账户,关系到服务的运行,第二个是服务信息描述,如:服务名、是否自动启动等

右键serviceprocessinstaller1属性,将account属性选择为localsystem

c#创建windows服务入门教程实例

右键serviceinstaller1属性,将starttype属性设为automatic(自动启动),description为“我的第一个windows服务”

全部保存后生成,找到生成的程序。

c#创建windows服务入门教程实例

由于windows服务不能通过双击直接运行,所以我们需要借助.net提供的installutil.exe来安装服务。

c#创建windows服务入门教程实例

按回车开始安装,成功后会提示 “提交”阶段已成功完成,如果失败则是“回滚”阶段已成功完成

c#创建windows服务入门教程实例

打开windows服务管理器就能看到我们安装的服务,默认服务安装成功后不会立刻启动,需要我们手动启动

c#创建windows服务入门教程实例

如果不出意外,会显示已启动

c#创建windows服务入门教程实例

到d盘目录下找到service1.txt,打开会看到我们填入的信息,说明我们做的windows服务已经成功了。

要卸载windows服务可以用installutil.exe /u windowsservice1.exe来卸载或通过系统命令 sc delete 服务名来卸载。