Windows服务应用程序是一种需要长期运行的应用程序,它对于服务器环境特别适合。它没有用户界面,并且也不会产生任何可视输出。任何用户消息都会被 写进Windows事件日志。计算机启动时,服务会自动开始运行。它们不要用户一定登录才运行,它们能在包括这个系统内的任何用户环境下运行。通过服务控 制管理器,Windows服务是可控的,可以终止、暂停及当需要时启动。
1.新建一个Windows服务项目
2.系统自动创建了一个Service1.cs的文件,双击打开Service1.cs文件,在工作区域右键-->属性或者F4可以查看文件属性
Autolog 是否自动写入系统的日志文件
CanHandlePowerEvent 服务时候接受电源事件
CanPauseAndContinue 服务是否接受暂停或继续运行的请求
CanShutdown 服务是否在运行它的计算机关闭时收到通知,以便能够调用 OnShutDown 过程
CanStop 服务是否接受停止运行的请求
ServiceName 服务名称
3.额,默认的Service1.cs文件名字确实比较不讨人喜欢,因此我们把文件名字修改成TestService(注意是文件名字而不是ServiceName,在上一步中,我已经定义ServiceName为TestService了,当然也可以是其他的)
4.Windows服务的主函数写在Program文件中,让我们来看看它的代码,发现如果我们定义了N多个服务,可以再这里定义到底运行哪个服务。
/// <summary> /// 应用程序的主入口点。 /// </summary> static void Main() { ServiceBase[] ServicesToRun; ServicesToRun = new ServiceBase[] { new TestService() }; ServiceBase.Run(ServicesToRun); }
5.查看TestService的代码,默认实现了OnStart和OnStop两个方法,以向一个文本中写入数据为例
public TestService() { InitializeComponent(); } /// <summary> /// 服务启动了 /// </summary> protected override void OnStart(string[] args) { HGL.Toolkit.IOHelper.FileOperate.WriteFile(@"F:\1.txt", "服务启动了\n"); } /// <summary> /// 服务停止了 /// </summary> protected override void OnStop() { HGL.Toolkit.IOHelper.FileOperate.WriteFile(@"F:\1.txt", "服务停止了\n"); } /// <summary> /// 系统关闭 /// </summary> protected override void OnShutdown() { HGL.Toolkit.IOHelper.FileOperate.WriteFile(@"F:\1.txt", "系统关闭\n"); } /// <summary> /// 服务暂停了 /// </summary> protected override void OnPause() { HGL.Toolkit.IOHelper.FileOperate.WriteFile(@"F:\1.txt", "服务暂停了\n"); } /// <summary> /// 服务继续 /// </summary> protected override void OnContinue() { base.OnContinue(); } /// <summary> /// 系统电源状态改变 /// </summary> protected override bool OnPowerEvent(PowerBroadcastStatus powerStatus) { return base.OnPowerEvent(powerStatus); }
6.安装服务,切换到 Service1.cs[设计] 界面,右击选择“添加安装程序”。
这时项目中就添加了一个新类 ProjectInstaller 和两个安装组件 ServiceProcessInstaller 和 ServiceInstaller。
选中“serviceInstaller1” 控件,F4打开属性面板
Description 服务程序的描述信息
DisplayName 服务程序显示的名称
StartType 指定如何启动服务
Manual 服务安装后,必须手动启动
Automatic 每次计算机重新启动时,服务都会自动启动
Disabled 服务无法启动
选中“serviceProcessInstaller1” 控件,F4打开属性面板
将serviceProcessInstaller类的Account属性改为 LocalSystem。这样,不论是以哪个用户登录的系统,服务总会启动。
7.右击项目选择生成即可,Windows服务是不能通过F5进行运行的