海海日记-冯海滨博客

您现在的位置是:首页 > C# > 正文

C#

Windows服务程序的编写、调试、部署

happyfhb2012-08-15C#1082

文章来自:http://www.cnblogs.com/lindping/ 感谢作者给大家的贡献致谢

基本概念

什么是Windows服务?作为.net开发人员,平常写的都是winform程序或者asp.net程序,可能对Windows服务程序接触的不多,下面我摘了个百度文献的解释给大家:

Microsoft Windows 服务(即以前的NT服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行

 

2. 编写服务运行代码

项目建立完毕以后,VS自动创建了程序启动类program.cs,和一个继承于ServiceBaseService1类,当然我们可以修改Service1适当的类名,比如我这里就改为

DemoService然后可以在方法OnStart里填充我们需要该服务运行的代码,比如我这里就启动一个时钟,让它隔10秒就干点什么事

public partial class DemoService : ServiceBase

    {

        public DemoService()

        {

            InitializeComponent();

        }

        System.Timers.Timer timer;

        protected override void OnStart(string[] args)

        {

            timer = new System.Timers.Timer(10000);

            timer.Enabled = true;

            timer.Elapsed +=new System.Timers.ElapsedEventHandler(timer_Elapsed);

        }

        private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)

        {

            // dosomethting();

        }

        protected override void OnStop()

        {

           timer.Enabled = false;

        }

 }

 

3. 服务的安装运行

 

3.1. 为了使服务能安装运行起来,我们还要添加一个安装类,如Installer1

 

3.2. 打开Installer1组件的设计界面,我们从工具箱里把两个组件ServiceInstallerServiceProcessInstaller拖到界面上,如果你的工具箱没有这两个组件,那么需要右击工具箱选择Choose Items.net 类库里添加到工具箱。

3.3. ServiceInstaller主要用于定义服务属性,如ServiceName(这个很重要),DisplayName,服务的启动方式StartType(自动启动,手动启动,不启动),不要忘了parent指向Installer1

3.4. ServiceProcessInstaller则用于指定运行服务时使用的用户身份,一般选择LocalSystem,同样需要把Parent设为Installer1

3.5. 编译成功后,打开VSComand Prompt,进入项目的bin\debug目录下,运行命令InstallUtil.exe DemoService.exe,服务安装成功后,运行命令”net start  DemoService”即可启动服务了(这里DemoService便是前面设置的ServiceName)

4. 服务的调试

由于windows服务不能像普通应用程序那样在VS里通过debug启动,所以要进入调试状态也麻烦一些,必须以上述方式启动服务后,在VS里通过ToolsàAttach Process,把服务进程加载进来,然后就可以设置断点和普通应用程序一样调试了。

5. 服务的停止和卸载

3.5类似,服务的停止命令是net stop  DemoService,卸载的命令是InstallUtil.exe  /u DemoService.exe,卸载服务前必须先停止服务。当然,服务安装成功后,你也可以到   开始à程序à管理工具à服务  里找到该服务,通过右键菜单进行启动和停止,或者修改其启动类型。

6. 我的服务安装与启动的批处理命令

Windows的安装与启动是不是原始和繁琐了?尤其是在程序还在修改过程中的时候,反复的安装卸载或者启动停止,非常麻烦,所以我写了几个批处理文件。

 

6.1 install.bat先停止服务(如果已存在),然后卸载,安装,启动。当服务第一次安装或者重新安装的时候均可使用此命令。 内容如下:

net stop DemoService

InstallUtil.exe /u DemoService.exe

InstallUtil.exe   DemoService.exe

net start  DemoService

6.2 unstall.bat,就是卸载指定服务,内容如下:

net stop DemoService

InstallUtil.exe /u DemoService.exe

6.3 start.bat,启动服务内容如下:

net start  DemoService

6.4 停止服务内容如下:

net stop DemoService

6.5 InstallUtil.exe C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727目录里拷贝出来,与上述批处理文件,服务可执行文件DemoService.exe放置于同一目录下,现在,一点鼠标就能对服务进行安装卸载启动停止各种操作了。

服务的优点与用途

如前面所言,windows服务适合用来运行一些长时间执行的程序,不需要过多的人为干预,没有前台界面,不容易受界面操作影响,相比于普通应用程序稳定性较好。对于一些自动定时执行的程序,或者一些服务性程序,都适合使用windows服务,比如我前面编写的自动任务执行程序,又或者Remoting服务。

平淡中储蓄成长

发表评论

评论列表

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~