Windows服务程序通常是一种在OS的后台长期运行的程序,根据需要你可以设置为随服务器启动而同时启动等等,在传统的C/S结构的程序开发中,Windows服务更是以Server端普遍存在.在.NET应用程序中,无论是Winform下的应用还是ASP.NET,Windows服务也都非常重要,比如我们可以把一个.Net Remoting服务端封装在一个windows服务中,来达到稳定提供服务的目的.

切入正题,首先我们来了解如何在VS下开发基于.Net的windows服务.
实际上,在VS下建立一个windows服务程序非常的简单,微软帮我们做了80%的工作,我们所需要做的只是处理那20%的业务工作.
首先,我们建立一个Windows Service程序,VS提供了现成的项目模版,选择Files->New->Project->Windows->Windows Service
之后,你将获得两个文件Service组件和Program.cs.我们要建立服务的话,首先需要添加专用的安装组件,这步同样很简单,选择服务组件,并切换到设计模式,右键->Add Installer,生成了了安装文件,切换到设计模式,这里你将看到两个组件:ServiceInstaller和ProcessInstaller,这里没有太多需要说明的,大部分是对服务的名称,描述等信息的设置,只有2个地方需要注意下.一个是StartType,有三种选择自动,手动,禁用.如果想要自动启动,那么遍选择Automatic即可.另一个需要注意的属性是Account,选择用户,一般情况下,我们选择Local System即可.
到现在,如果我们想要建立一个服务,实际上已经结束了,只需要在服务组件的OnStart和OnStop等函数中加上个人的业务处理.在Program.cs文件中,是如下代码:
static void Main()
{
ServiceBase[] ServicesToRun;
// More than one user Service may run within the same process. To add
// another service to this process, change the following line to
// create a second service object. For example,
//
//   ServicesToRun = new ServiceBase[] {new Service1(), new MySecondUserService()};
//
ServicesToRun = new ServiceBase[]
{ new Service1() };
ServiceBase.Run(ServicesToRun);
}
这段代码用于启动服务.
如果要在服务里启动多个服务,则可以如下
ServiceBase[] ServicesToRun;
           ServicesToRun = new ServiceBase[] {
     new Service1(),
              new Service2() };
            ServiceBase.Run(ServicesToRun);
接下来的工作就是安装服务.你可以通过制作安装包实现,或者直接通过命令行来执行安装.
当你编译完项目后,你可以在bin/debug目录下看到扩展名为.exe的可执行文件,这就是服务程序,但直接双击是无法运行的,你需要通过特定的工具来安装它,微软提供给我们的工具就是installutil.exe.这个程序位于%SystemRoot%/Microsoft.NET/Framework//%Version%/,version指的是.net版本号.
安装一个服务程序,我们是在命令行内键入:installutil.exe  服务程序路径.如果是要删除某个服务则是installutil.exe /u 服务程序路径.

  安装及卸载服务可以分别建立两个bat文件,内容如下:
 --begin-- 
--安装服务
  cd c:\
  --定位到InstallUtil.exe 命令所在的目录
  cd C:\Windows\Microsoft.NET\Framework\v4.0.30319\
  --执行命令 InstallUtil.exe 服务程序路径
  InstallUtil.exe  D:\winform2008\WindowsServiceOpenCmd\WindowsServiceOpenCmd\bin\Debug\WindowsServiceOpenCmd.exe
  pause
--end--
--begin--
  --卸载服务
  cd c:\
  cd C:\Windows\Microsoft.NET\Framework\v4.0.30319\
  -- /u 参数表示卸载
  InstallUtil.exe /u D:\winform2008\WindowsServiceOpenCmd\WindowsServiceOpenCmd\bin\Debug\WindowsServiceOpenCmd.exe
  pause
--end--
建好两个bat文件后,在win7下右键以管理员身份运行即可
执行了安装操作后,我们去控制面版->管理工具->服务中就可以看到我们的服务程序了.
最后,谈谈调试中的技巧.
编写这种服务程序,调试起来非常的麻烦,而且每次有所变化后,还得频繁的去执行installutil和installutil /u命令,实际上,我们可以通过编写一些BuildEvents来大大简化这其中的烦琐工作.这里,我们在BuildEvents编写如下事件:
net stop YourServiceName
copy /y "$(TargetDir)" "$(ProjectDir)bin"
"%SystemRoot%/Microsoft.NET/Framework/v2.0.50727/InstallUtil.exe" /u $(ProjectDir)bin/$(TargetFileName)
"%SystemRoot%/Microsoft.NET/Framework/v2.0.50727/InstallUtil.exe"  $(ProjectDir)bin/$(TargetFileName)
net start YourServiceName
简单解释下:
停止当前服务->把debug目录下所有东西copy到bin目录下->执行反安装操作->执行安装操作->启动服务.
最后把该事件设置为OnSuccessfulBuild即可.
由于是服务程序,如果想要直接debug比较的麻烦,可以通过附加进程来调试大多数代码,但是如果想要调试OnStart和OnStop方法.则只能通过其他的项目来调试.
附加到进程的调试方法

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

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

实际上,我们可以直接在OnStart()方法中通过EventLog.WriteEntry("Hi,I'm wiseman");来向事件查看器中写入一些你感兴趣的信息,很大程度上可以解决debug的问题.



c#开发Windows服务程序及部署相关推荐

  1. c#开发Windows服务程序指南

    转载:http://sunday.blog.51cto.com/360410/94315 本文将较为详细的介绍如何在.net下开发Windows服务程序,并将简要介绍一些开发中的调试技巧及后期的部署问 ...

  2. .NET开发Windows服务

    一.概述 本文旨在简单论述如何开发Windows服务程序. 服务名称:ServiceTest 实验环境:VS2015 最终程序结构: 二.步骤 1.创建一个项目,选择Windows 服务,更改项目名称 ...

  3. C#使用Topshelf和Quartz开发处理定时任务的Windows服务程序

    C#使用Topshelf框架和Quartz开发处理定时任务的Windows服务程序 背景 依赖 C#代码示例 任务调度的配置文件 测试 服务安装.启动.停止.卸载 背景 有些业务是运行在后台,需要界面 ...

  4. php larval框架运行环境,4种Windows系统下Laravel框架的开发环境安装及部署方法详解...

    1.准备工作 1.1PHP集成环境 这里我们使用的是XAMPP,XAMPP是一个功能强大的建站集成软件包,采用一键安装的方式,包含PHP7.0.Mysql.Tomcat等.最新版下载地址:PHP 5. ...

  5. Windows下快速部署PHP开发环境

    初学开发时,开发环境的部署实在是让人比较头大的事情,本文简单介绍在Windows下如何快速部署PHP的开发环境,使得大家能在短时间内尽快部署环境,学习开发. 本文主要介绍Windows环境下部署Apa ...

  6. 多线程、方便扩展的Windows服务程序

    多线程.方便扩展的Windows服务程序 吴剑 2012-06-02 原创文章,转载必需注明出处:http://www.cnblogs.com/wu-jian/ 前言 在项目应用中经常会碰到定时调度的 ...

  7. 利用vs.net快速开发windows服务(总结)

    引用 http://www.cnblogs.com/lovecherry/archive/2005/03/25/125527.html 在很多应用中需要做windows服务来操作数据库等操作,比如 ( ...

  8. netcore开发windows普通服务(非Web)并一键发布到服务器

    netcore下开发windows服务如果是web项目的话,由于aspnetcore本身是支持的,把默认的host.Run改为host.RunAsService就可以了. 但是普通的netcore的控 ...

  9. 程序员开发windows linux,好程序员不用windows作开发环境

    好程序员不用windows作为开发环境,今天我想就这个点吐槽一下.最近因为工作关系,需要在windows机器上工作一段时间,作为一个用了多年windows,然后切换到ubuntu作为工作环境两年时间, ...

最新文章

  1. SQL查询语句 select 详解
  2. ant 的 copy 使用
  3. c从sqlite3数据库中获取数据,并对数据进行拼接
  4. 前端面试系列-ES6
  5. boost::mpl::aux::largest_int相关用法的测试程序
  6. SAP Spartacus 服务器端渲染单步调试步骤之二:在服务器端执行应用程序 Angular 代码
  7. vue 定义全局弹框_用vue/react写一个全局提示弹框
  8. LeetCode - Majority Element
  9. JAVA入门级教学之(myeclipse的使用)
  10. 我也想对广大程序员说一些话
  11. 数据结构和算法———P3 时间复杂度和空间复杂度
  12. 在Azure Data Studio中查看执行计划
  13. JZOJ_3928. 射击 (Standard IO)
  14. ubuntu 压缩率最高的软件_国外这款不知名的视频压缩软件,100M视频秒变2M,网友:太好用了...
  15. npm打包项目报错:npm ERR! A complete log of this run can be found in:npm ERR! C:\Users\AppData\Roa...
  16. HIT软件构造复习 lab篇
  17. 大三学生HTML期末作业,网页制作作业——HTML+CSS+JavaScript饮品饮料茶(7页)
  18. python1到100奇数和_python计算1~100的和,1~100奇数的和,1~100偶数的和,一条代码求1~100的和...
  19. 不使用redis,在前后端分离项目的条件下将验证码进行储存
  20. Android点9图机制及在聊天气泡中的应用

热门文章

  1. 能够摧毁你的只有你自己
  2. Reflector破译
  3. aliyun视频点播学习
  4. Atitit 怎么阅读一本书 消化 分析 检索 attilax总结 1 读书的本质 是数据的处理 大量的数据 处理能力
  5. 静态代码分析工具列表分析---代码分析工具列表(30款工具)
  6. 【博学谷学习记录】超强总结,用心分享| 数据仓库
  7. hive是什么[博学谷技术支持]
  8. 基于Redission实现分布式锁
  9. 2021年煤气考试题及煤气模拟试题
  10. 【新书推荐】【2019.05】财务诡计:如何识别财务报告中的会计诡计和舞弊(原书第4版)...