序言

前段时间做一个数据迁移项目,刚开始用B/S架构做的项目,但B/S要寄存在IIs中,而IIs又不稳定因素,如果重启IIs就要打开页面才能运行项目。有不便之处,就改用Windows服务实现。这篇就总结下,windows服务的编写,调试,安装卸载。

Windows服务介绍

Microsoft Windows 服务能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序。这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面。这使服务非常适合在服务器上使用,或任何时候,为了不影响在同一台计算机上工作的其他用户,需要长时间运行功能时使用。还可以在不同于登录用户的特定用户帐户或默认计算机帐户的安全上下文中运行服务。本文就向大家介绍如何运用Visual C#来一步一步创建一个文件监视的Windows服务程序,然后介绍如何安装、测试和调试该Windows服务程序。

创建Windows服务

创建好项目之后 --- >> 双击 Service1.cs  ---- >>  出现一个设计界面   ---->> 右键界面  --- >> 弹出对话框选择添加安装程序

上面一系列操作完成后,就可以对windows服务名称描述以及启动方式等进行修改。

  1. [RunInstaller(true)]
  2.  
  3. public class Installer1 : System.Configuration.Install.Installer
  4. {
  5.  
  6. /// <summary>
  7. /// 必需的设计器变量。
  8. /// </summary>
  9. private System.ComponentModel.Container components = null;
  10. private System.ServiceProcess.ServiceProcessInstaller spInstaller;
  11. private System.ServiceProcess.ServiceInstaller sInstaller;
  12.  
  13. public Installer1()
  14. {
  15. // 该调用是设计器所必需的。
  16. InitializeComponent();
  17. // TODO: 在 InitComponent 调用后添加任何初始化
  18. }
  19.  
  20. #region Component Designer generated code
  21. /// <summary>
  22. /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  23. /// 此方法的内容。
  24. /// </summary>
  25. private void InitializeComponent()
  26. {
  27. components = new System.ComponentModel.Container();
  28. // 创建ServiceProcessInstaller对象和ServiceInstaller对象
  29. this.spInstaller = new System.ServiceProcess.ServiceProcessInstaller();
  30. this.sInstaller = new System.ServiceProcess.ServiceInstaller();
  31.  
  32. // 设定ServiceProcessInstaller对象的帐号、用户名和密码等信息
  33. this.spInstaller.Account = System.ServiceProcess.ServiceAccount.LocalSystem;
  34. this.spInstaller.Username = null;
  35. this.spInstaller.Password = null;
  36.  
  37. // 设定服务名称
  38. this.sInstaller.ServiceName = "PmsDataUpdateService";
  39. //服务描述
  40. this.sInstaller.Description = "hi longhao !";
  41.  
  42. // 设定服务的启动方式
  43. this.sInstaller.StartType = System.ServiceProcess.ServiceStartMode.Automatic;
  44.  
  45. this.Installers.AddRange(
  46. new System.Configuration.Install.Installer[] { this.spInstaller, this.sInstaller });
  47. }
  48.  
  49. #endregion
  50.  
  51. }

修改好后回头,写入自己想要的操作。Service1.cs出现设计界面,双击设计界面进入cs代码页。可以重写这些方法。

  1. protected override void OnStart(string[] args)
  2. {
  3. //服务开启执行代码
  4. }
  5. protected override void OnStop()
  6. {
  7. //服务结束执行代码
  8. }
  9. protected override void OnPause()
  10. {
  11. //服务暂停执行代码
  12. base.OnPause();
  13. }
  14. protected override void OnContinue()
  15. {
  16. //服务恢复执行代码
  17. base.OnContinue();
  18. }
  19. protected override void OnShutdown()
  20. {
  21. //系统即将关闭执行代码
  22. base.OnShutdown();
  23. }

除此之外还有一个Program.cs文件:打开看下。

使得一个Windows服务程序能够正常运行,我们需要像创建一般应用程序那样为它创建一个程序的入口点。在Windows服务程序 中,我们也是在Main()函数中完成这个操作的。首先我们在Main()函数中创建一个Windows服务的实例,该实例应该是ServiceBase 类的某个子类的对象,然后我们调用由基类ServiceBase类定义的一个Run()方法。然而Run()方法并不就开始了Windows服务程序,我 们必须通过前面提到的服务控制管理器调用特定的控制功能来完成Windows服务程序的启动,也就是要等到该对象的OnStart()方法被调用时服务才 真正开始运行。如果你想在一个Windows服务程序中同时启动多个服务,那么只要在Main()函数中定义多个ServiceBae类的子类的实例对象 就可以了,方法就是创建一个ServiceBase类的数组对象,使得其中的每个对象对应于某个我们已预先定义好的服务。

  1. /// <summary>
  2. /// 应用程序的主入口点。
  3. /// </summary>
  4. static void Main()
  5. {
  6. ServiceBase[] ServicesToRun;
  7. ServicesToRun = new ServiceBase[]
  8. {
  9. new Service1(),
  10. new Service2()
  11. };
  12. ServiceBase.Run(ServicesToRun);
  13. }

如果你在你需要的函数里面写过你需要的方法后,点运行则不可运行。

安装卸载windows服务

1、安装需要用,这个小玩意可以在网上下载到的。

2、把他放到你编写好的服务程序/bin/Debug文件夹下。

3、打开

4、用命令读到你服务.exe文件夹下。

5、运行 installutil.exe

6、安装服务命令: installutil  yourservices.exe

7、卸载服务命令: installutil  /u  yourservices.exe

注意的是:安装跟卸载需要保证程序是一样的,没有变更过的,要不会提示卸载不干净。也就是在已安装过服务的时候,不要在vs中修改你的程序。

调试windows服务

保证你的服务已安装成功,且处于启动模式。

点调试--->> 附加到进程

即可。

注意的是:

打开任务管理器:结束进程。

c#写windows服务(转)的更多相关文章

  1. 不用写Windows服务实现定时器功能(FluentScheduler )

    MacBook Pro 只有四个 USB Type-C 接口是否错了? 一项新技术的诞生总会对已存在的事物造成冲击或影响,如果大家都害怕冲击与影响,那这个世界永远像现在不变就行了,大家都好好的,待在自 ...

  2. 用python写windows服务

    用python写windows服务(1) 以python2.5 为例需要软件 * python 2.5        * pywin32(与2.5 版本相匹配的) Service Control Ma ...

  3. c#写windows服务

    序言 前段时间做一个数据迁移项目,刚开始用B/S架构做的项目,但B/S要寄存在IIs中,而IIs又不稳定因素,如果重启IIs就要打开页面才能运行项目.有不便之处,就改用Windows服务实现.这篇就总 ...

  4. 【python】使用python写windows服务

    背景 运维windows服务器的同学都知道,windows服务器进行批量管理的时候非常麻烦,没有比较顺手的工具,虽然saltstack和ansible都能够支持windows操作,但是使用起来总感觉不 ...

  5. c#写windows服务 小demo

    前段时间做一个数据迁移项目,刚开始用B/S架构做的项目,但B/S要寄存在IIs中,而IIs又不稳定因素,如果重启IIs就要打开页面才能运行项目.有不便之处,就改用Windows服务实现.这篇就总结下, ...

  6. C# 使用vs2013 写 windows服务

    第一步:添加windows服务项目 并起一个 好看的名字 第二步:添加安装程序 第三步:右键点击serviceProcessInstaller1属性,在Account中选择LocalSystem 第四 ...

  7. 使用C#写windows服务

    首先,创建一个windows服务项目

  8. VS2010 中,windows服务不能添加 System.Web 引用

    今天在写windows服务的时候,右键添加引用->.NET中没有找到System.Web,在->Recent中找到System.Web,但添加完后却显示黄色叹号,最后百度一下解决了这个问题 ...

  9. 使用windows服务更新站点地图

    由于公司平台访问人数逐渐增多,公司项目的数据库已经几次出现宕机现象.为减轻数据库压力,我上个月对公司项目做了下调整.把新闻板块提取出来单独一个站点,单独一个数据库.减少了主站点和数据库的负担和压力. ...

随机推荐

  1. JS 判断图片尺寸大小,以便页面resize时,动态调整页面元素位置

    ){ clearInterval(global_timename4pool); } } //由于无法判断图片显示完整的时机,只好用定时器来做,计算完成后再关掉定时器. global_timename4 ...

  2. opencart 引入 TWIG 模板引擎

     1.首先将 twig 包放入 system\library 目录. 2.在 system/startup.php 文件最后添加引入语句. require_once(DIR_SYSTEM . 'lib ...

  3. Excel保护工作表

    最近见到一个Excel文件,其中的表不能选中,不能编辑,今天研究了一下 明白了其设置方法 excel中开始--格式--保护工作表--去掉所有勾选,输入保护密码  即可

  4. monitor system

    #!/bin/bash # #Snapshot_Stats - produces a report for system stats # This report will mail to root. ...

  5. assign() 方法

    assign() 方法可加载一个新的文档. 语法 location.assign(URL) <html> <head> <script type="text/j ...

  6. HTML中表格元素TABLE,TR,TD及属性的语法

    table:表格元素及属性 <table width="80%" border="1" cellspacing="1" cellpad ...

  7. 【python】入门学习(五)

    字符串: 正索引,从0开始 和 负索引,从-1开始 >>> s = 'apple' >>> s[0] 'a' >>> s[1] 'p' >& ...

  8. php数据访问(批量删除)

    批量删除: 首先给每一行加上复选框,也就是在自增长列内加入checkbox.因为这里可以多选,也可以单选,所以在传值的时候需要传一个数组来进行处理,所以复选框name的值设定一个数组.传值都是传的va ...

  9. [Android Pro] Service (startservice , bindservice , unbindservice, stopService)

    1: startService -------stopService (this will call onDestroy) 2: bindService -------unbindService    ...

  10. JS获取阴历阳历和星期

    获取当前阳历日期时间,阴历日期和星期,三者分开,可自行调整顺序.  新建JS文件getdates.js,代码如下:/*获取当前阳历日期*/function getCurrentDateTime() { ...