创建项目选择Windows Service

创建好项目之后,在生成的Service1.cs的设计页面右键选择Add Installer,会生成一个ProjectInstaller.cs。这个文件中有两个组件:serviceProcessInstaller和serviceInstaller。

对这两个组件进行设置:

serviceProcessInstaller设置属性Account为LocalSystem,这样创建服务的时候,不需要用户名和密码。

serviceInstaller1设置属性ServiceName,Description和DisplayName。ServiceName代表服务名称,Description代表服务的描述,DisplayName代表服务的显示名称。还有另外两个属性DeplayedAutoStart配置成True,StartType配置成Automatic。

从下图服务列表可以看出名称对应DisplayName,描述对应Description,启动类型对应StartType,登录为对应Account(serviceProcessInstaller)。

服务具体代码的编写涉及到service.cs中的OnStart和OnStop两个函数:

protected override void OnStart(string[] args)
{
} protected override void OnStop()
{
}

在服务函数完成、编译成功之后,在生成的exe文件夹下放入两个批处理文件:


安装服务:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe ServiceExample.exe

Pause

卸载服务:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe /u X5_Statistic.exe

Pause


C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe是由于程序用的是.net4.0的framework,后面的ServiceExample.exe不过是exe文件名。

需要注意这几个事情

1 StartType即使配置成Automatic,在首次安装成功之后还是要在服务列表中找到并手工启动。(当然,可以在OnStart函数中通过编码实现安装后自动启动)

2 在服务中处理,避免不了使用定时器,要注意这里不能使用Form命名空间下的Timer,因为服务不是窗体类型的应用,所以不能使用这个组件。要使用System.Timers下的Timer。

3 如果服务执行异常,会导致服务启动失败,提示是类似“…服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止”的语句,这种情况下不容易查出毛病在哪,当然可以通过attach to process来调试,不过我自己更习惯于在普通的form程序中通过按钮模拟找出程序执行异常的关键代码,修改通过之后再移植到服务的代码中再测试。

4 要获取服务所在的目录,请使用AppDomain.CurrentDomain.BaseDirectory这个只读属性。建议需要生成服务的执行情况日志的,将日志文件放在服务所在的目录下。

使用C#创建windows 服务的更多相关文章

  1. 用C#创建Windows服务(Windows Services)

    用C#创建Windows服务(Windows Services) 学习:  第一步:创建服务框架 创建一个新的 Windows 服务项目,可以从Visual C# 工程中选取 Windows 服务(W ...

  2. 玩转Windows服务系列——创建Windows服务

    创建Windows服务的项目 新建项目->C++语言->ATL->ATL项目->服务(EXE) 这样就创建了一个Windows服务项目. 生成的解决方案包含两个项目:Servi ...

  3. .Net创建windows服务入门

    本文主要记录学习.net 如何创建windows服务. 1.创建一个Windows服务程序 2.新建安装程序 3.修改service文件 代码如下 protected override void On ...

  4. C# 创建Windows服务

    创建windows服务项目   2 右键点击Service1.cs,查看代码, 用于编写操作逻辑代码 3 代码中OnStart用于执行服务事件,一般采用线程方式执行方法,便于隔一段事件执行一回 END ...

  5. 使用Topshelf创建Windows服务

    概述 Topshelf是创建Windows服务的另一种方法,老外的一篇文章Create a .NET Windows Service in 5 steps with Topshelf通过5个步骤详细的 ...

  6. [转]C#创建Windows服务与安装

    本文档用于创建windows服务说明,使用vs2010系统平台 创建项目 1 创建windows服务项目 2 右键点击Service1.cs,查看代码, 用于编写操作逻辑代码 3 代码中OnStart ...

  7. [Solution] Microsoft Windows 服务(2) 使用Topshelf创建Windows服务

    除了通过.net提供的windows服务模板外,Topshelf是创建Windows服务的另一种方法. 官网教程:http://docs.topshelf-project.com/en/latest/ ...

  8. 在64位windows下使用instsrv.exe和srvany.exe创建windows服务

    在64位windows下使用instsrv.exe和srvany.exe创建windows服务   在32位的windows下,包括windows7,windows xp以及windows 2003, ...

  9. 使用Topshelf 5步创建Windows 服务 z

    使用Topshelf创建Windows 服务简要的介绍了创建Windows服务的另一种方法,老外的一篇文章Create a .NET Windows Service in 5 steps with T ...

  10. C#创建windows服务搭配定时器Timer使用实例(用代码做,截图版)

       功能说明:C#创建一个windows服务,服务启动时D:\mcWindowsService.txt写入数据,服务运行期间每隔两秒写入当前时间. 原理这些就不说了,三语两语说不清楚,直接贴一个实例 ...

随机推荐

  1. [ubuntu]为ubuntu设立“任务管理器”的组合键

    在windows下面,我们可以方便的使用ctrl+alt+delete调出任务管理器,那么在ubuntu下面如何实现呢?这里我们介绍两种方法:1.在终端下运行: 代码:gconf-editor 找到: ...

  2. 系统加速解决方案之Windows XP

    系统加速解决方案之Windows XP 在使用Windows XP的过程中,系统速度会随着时间的推移越来越慢,你可重装系统,但重装后,那么多的应用软件也要重新安装,如何在不安装系统的前提下提升Wind ...

  3. Java虚拟机学习 - 对象内存分配与回收 ( 5 )

    对象优先在Eden上分配 大多数情况下,对象优先在新生代Eden区域中分配.当Eden内存区域没有足够的空间进行分配时,虚拟机将触发一次 Minor GC(新生代GC).Minor GC期间虚拟机将E ...

  4. SDUT 2608 Alice and Bob (巧妙的二进制)

    Alice and Bob Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 Alice and Bob like playing ...

  5. iOS - CFSocket 的使用

    1.CFSocket 苹果对对底层 BSD Socket 进行轻量级的封装(纯 C). 主要使用的 API:CFSocekt 用于建立连接,CFStream 用于读写数据. 2.基本使用 2.1 Cl ...

  6. iOS - UIPasteboard

    前言 NS_CLASS_AVAILABLE_IOS(3_0) __TVOS_PROHIBITED __WATCHOS_PROHIBITED @interface UIPasteboard : NSOb ...

  7. vs开发 winform 设置winform 获取管理员权限启动

    因为需要设置为开机项 没有管理员权限对注册表访问失败 C# 以管理员身份运行WinForm程序 转载https://www.bbsmax.com/A/obzbkKrQJE/ 鱼洛 2016-07-29 ...

  8. 转:Web优化 及常用工具包

    Web优化: 减少http请求 避免404错误 在html页面header加入缓存标签 Gzip压缩网页 减少cookie体积 使用外部的js和css 消减js和css 压缩js 使用css spri ...

  9. AOV网与拓扑排序

    在一个表示工程的有向图中,用顶点表示活动,用弧表示活动之间的优先关系,这样的有向图为顶点表示活动的网,我们称之为AOV网(Activity on Vextex Network).AOV网中的弧表示活动 ...

  10. linux系统调用sysconf

    1.前言 当前计算机都是多核的,linux2.6提供了进程绑定cpu功能,将进程指定到某个core上执行,方便管理进程.linux提供了sysconf系统调用可以获取系统的cpu个数和可用的cpu个数 ...