文档章节

win7下用c#开发windows服务

短短的歼击机
 短短的歼击机
发布于 2014/08/18 15:33
字数 938
阅读 115
收藏 6

1、首选我们需要打开VS2008,然后点击文件--》新建--》项目,选择Visual C#--》windows--》windows服务。如下图所示:


2、然后修改Service1.cs类。

我们需要重写OnStart和OnStop方法。代码如下所示:

[csharp] view plaincopy

  1. using System;  

  2. using System.Collections.Generic;  

  3. using System.ComponentModel;  

  4. using System.Data;  

  5. using System.Diagnostics;  

  6. using System.ServiceProcess;  

  7. using System.IO;  

  8. using System.Text;  

  9. using System.Timers;  

  10. using System.Threading;  

  11.   

  12. //=================================================================================  

  13. //  

  14. //        Copyright (C) 2011, 飞龙在天     

  15. //        All rights reserved  

  16. //  

  17. //        FileName: Class1  

  18. //        Created by draonpeng2008 at 11-08-02 10:40:57   

  19. //        Email: liufeilong1983@163.com  

  20. //        http://blog.csdn.net/dragonpeng2008  

  21. //  

  22. //==================================================================================  

  23.   

  24. namespace WindowsServiceTest  

  25. {  

  26.     public partial class Service1 : ServiceBase  

  27.     {  

  28.         public Service1()  

  29.         {  

  30.             InitializeComponent();  

  31.         }  

  32.   

  33.         protected override void OnStart(string[] args)  

  34.         {  

  35.             EventLog.WriteEntry("我的服务启动--飞龙在天");//在系统事件查看器里的应用程序事件里来源的描述     

  36.             writestr("服务启动");//自定义文本日志     

  37.             System.Timers.Timer t = new System.Timers.Timer();//定时器  

  38.             t.Interval = 1000;//设置定时器时间间隔为1000毫秒  

  39.             t.Elapsed += new System.Timers.ElapsedEventHandler(ChkSrv);//到达时间的时候执行事件(每隔一秒)      

  40.             t.AutoReset = true;//设置是执行一次(false)还是一直执行(true);      

  41.             t.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件;      

  42.         }  

  43.   

  44.         protected override void OnStop()  

  45.         {  

  46.             writestr("服务停止");  

  47.             EventLog.WriteEntry("我的服务停止");   

  48.         }  

  49.   

  50.         /// <summary>     

  51.         /// 定时执行程序代码     

  52.         /// </summary>     

  53.         /// <param name="source"></param>     

  54.         /// <param name="e"></param>     

  55.         public void ChkSrv(object source, System.Timers.ElapsedEventArgs e)  

  56.         {  

  57.             int intSecond = e.SignalTime.Second;  

  58.             try  

  59.             {  

  60.                 //这里执行你的东西  

  61.                 writestr("服务运行中:"+intSecond);  

  62.                 Thread.Sleep(10000);  

  63.             }  

  64.             catch (Exception err)  

  65.             {  

  66.                 writestr(err.Message);  

  67.             }  

  68.         }  

  69.           

  70.   

  71.         /// <summary>  

  72.         /// 将信息输出到文本文件  

  73.         /// </summary>  

  74.         /// <param name="readme"></param>  

  75.         public void writestr(string readme)  

  76.         {  

  77.             StreamWriter dout = new StreamWriter(@"D:\" + "WindowsServiceTestLog.txt", true);  

  78.             dout.Write("\r\n事件:" + readme + "\r\n操作时间:" + System.DateTime.Now.ToString("yyy-MM-dd HH:mm:ss"));  

  79.             dout.Close();  

  80.         }     

  81.   

  82.   

  83.     }  

  84. }  


3、在Service1.cs的设计视图上右键“添加安装程序”。系统会自动生成“ProjectInstaller.cs”文件,在该文件的设计视图界面会有两个控件,一个是serviceProcessInstaller1,一个是serviceInstaller1。

如下图:


4、在ProjectInstaller.cs设计界面中,我们设置serviceProcessInstaller1和serviceInstaller1的属性。

serviceInstaller1属性中设置:

    Description(系统服务的描述)

    DisplayName (系统服务中显示的名称)

    ServiceName(系统事件查看器里的应用程序事件中来源名称)

    StartType(启动服务的方式,分为手动、自动和禁用)

serviceProcessInstaller1属性设置:

    Account 下拉设置成 LocalSystem

5、注意:我们无法在VS2008中调试该工程,会弹出错误信息,如下图:


6、我们需要用InstallUtil.exe进行服务的安装,该文件可以在

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\

文件夹下找到。

7、我们将InstallUtil.exe复制到源程序的Debug文件夹下,然后我们以管理员身份运行VS2008命令提示。


注意:这里必须以管理员的身份运行,否则在安装服务时会出现以下错误:

在“安装”阶段发生异常。

System.Security.SecurityException: 未找到源,但未能搜索某些或全部事件日志。不可访问的日志: Security。

8、然后我们执行CMD命令,定位到源程序的Debug文件夹下,因为我的Debug文件夹在E盘,所以使用的dos命令如下:

[sql] view plaincopy

  1. E:  

  2. cd E:\Projects\WindowsServiceTest\WindowsServiceTest\bin\Debug  

  3. InstallUtil WindowsServiceTest.exe  

执行结果如下图所示:


9、然后我们在控制面板--》管理工具--》服务中会看到多了一个MyService的服务。我们可以看到服务名称为:ServiceTest,服务描述为:我的测试服务。


10、我们启动服务,然后打开D盘根目录,会看到多了一个名为:WindowsServiceTestLog.txt的文本文件。

打开该文本文件,会看到我们新建的服务每秒往该文本文件中写入了一行文本。


11、最后我们就可以卸载该服务了,我们在命令行中输入:

[sql] view plaincopy

  1. InstallUtil -u WindowsServiceTest.exe  


可以看到执行结果如下:


我们再到服务中查看,就会发现“MyService”已经被卸载掉了。


本文转载自:

上一篇: 自定义AlertDialog
下一篇: xUtils框架
短短的歼击机

短短的歼击机

粉丝 82
博文 268
码字总数 269797
作品 0
武汉
高级程序员
私信 提问
多媒体播放器的视频截取功能

项目描述:在.NET下用开发了一个播放器,前台界面是用WPF做的,后台的操作是用media foundation(也就是windows的下一代多媒体开发平台,运行在win7上,试图替代ds的)做的,目前播放视频的一...

xiaoqihaha
2013/03/18
761
4
win7下用c#开发windows服务

今天跟大家介绍一下如何在win7系统下使用C#开发windows服务。主要的内容是参考了网上的一些资料及自己的研究所得。 1、首选我们需要打开VS2008,然后点击文件--》新建--》项目,选择Visual ...

postdep
2012/11/14
2.2K
0
运行自己的程序后,Word不能打开

如题。假设我的程序名叫A.exe、 1.开机后运行A.exe(不关闭),再运行word。word直接提示或者打开后提示 Word2010已停止工作。 2.等了一会儿进入调试,VS2010的状态分以下两种 a.直接奔溃提示 ...

caiv
2013/10/30
293
0
求助win7 fedora27双系统 应该怎样安装

电脑只有一个固态硬盘, 分为C D E三个盘, C盘装WIN7 ,D盘装软件 游戏什么的 ,准备用E盘装 fedora27 把在windows下用分区精灵把C盘转换为guid模式,然后重启进入u盘pe把C盘删除 ,创建了个...

byNcz
2017/12/08
226
0
Docker安装踩坑:E_FAIL 0x80004005的解决

参考 菜鸟教程--Windows Docker 安装 http://www.runoob.com/docker/windows-docker-install.html 官方文档-Install Docker Toolbox on Windows https://docs.docker.com/toolbox/toolboxins......

karma123
2018/12/19
252
0

没有更多内容

加载失败,请刷新页面

加载更多

不就是SELECT COUNT语句吗,竟然能被面试官虐的体无完肤

数据库查询相信很多人都不陌生,所有经常有人调侃程序员就是CRUD专员,这所谓的CRUD指的就是数据库的增删改查。 在数据库的增删改查操作中,使用最频繁的就是查询操作。而在所有查询操作中,...

HollisChuang
33分钟前
6
0
乐观锁和悲观锁

乐观锁和悲观锁 在并发环境下,事务的隔离性很难保证,因此会出现很多并发一致性的问题 事务的特性:原子性、一致性、隔离性、持久性 1、丢失修改:T1和T2两个事务对同一个数据进行修改,T1先...

大瑞清_liurq
42分钟前
5
0
Scrum敏捷价值观与原则

Scrum是一种迭代式增量软件开发过程,通常用于敏捷软件开发。如果还不知道Scrum敏捷开发的朋友们,请出门左转,点击 Scrum 了解。 敏捷价值观 个体和互动 高于 流程和工具 工作的软件 高于 ...

醉美閑聖
42分钟前
5
0
android焦点

final RelativeLayout relativeLayout=new RelativeLayout(context); relativeLayout.setClickable(true); relativeLayout.setFocusable(true); rel......

安卓工程师王恒
44分钟前
4
0
IP地址分配与中继设备简介

1. TCP/IP模型 TCP/IP协议是在OSI参考模型出现之间就被开发的,并广泛部署在计算机网络中。但是,后来由于概念混淆,TCP/IP模型的层次和名称往往与OSI模型的层次名称相互借用。如图1.所示。 ...

xiangyunyan
45分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部