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

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

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

首先,用vs创建一个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转到服务设计界面,在空白处右键选择“添加安装程序”

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

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

右键serviceProcessInstaller1属性,将Account属性选择为LocalSystem

右键serviceInstaller1属性,将StartType属性设为Automatic(自动启动),Description为“我的第一个windows服务”

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

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

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

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

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

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

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

最新文章

  1. [APUE]标准IO库(上)
  2. HTML5+JS 《五子飞》游戏实现(六)鼠标响应与多重选择
  3. YY游戏私有云平台实践 (转自InfoQ )
  4. git ignore不生效删除缓冲
  5. knockout之各种数据绑定方法:text、attr、visible、html、css、style绑定
  6. Workflow_如何处理标准异常和自定义异常(案例)
  7. VirtualBox Headless启动虚拟机
  8. cocos2dX 事件之触摸事件和触摸事件集合
  9. 浅谈 JavaScript new 执行过程及function原理
  10. react学习笔记-02
  11. Videojs视频插件在React中的应用
  12. Java 字符编码(三)Reader 中的编解码
  13. HDFS集群数据不均衡处理
  14. Java用Jackson遍历json所有节点
  15. Maven的classifier作用
  16. idea中 mybatis的debug文件需要放在src的目录下 不能加多余的路径
  17. Windows下安装Python requests模块
  18. 机器学习----人脸对齐的算法-ASM.AAM..CLM.SDM
  19. SQL Server 属性不匹配。存在属性(Directory, Archive),包括属性(0),不包括属性(Archive, Compressed, Encrypted)
  20. sqlite性能优化

热门文章

  1. 2016-2017-1 《信息安全系统设计基础》 学生博客及Git@OSC 链接
  2. WPF绘制简单常用的Path
  3. PlayMaker的应用
  4. Uncaught Error: Bootstrap tooltips require Tether (http://github.hubspot.com/tether/)
  5. Microsoft.AspNet.Identity 自定义使用现有的表—登录实现
  6. logging 模块误用导致的内存泄露
  7. .net core 一次坑爹的类库打包过程
  8. bzoj1588
  9. 【SQL】Oracle分页查询的三种方法
  10. socket编程基础