目录结构:

contents structure [+]
  1. 创建Windows服务
  2. 配置
  3. 安装Windows服务
  4. 在Visual Studio中调试
  5. 常见问题

最近写了一个TCP连接的程序,由于这种通信协议不同于HTTP协议,因此还不能部署到网站上面,于是就用到了Window服务。接下面笔者介绍一下在Visual Studio中如何安装、调试Windows服务。笔者的Visual studio版本为2012,window版本为win7。

1.创建Windows服务

这时候点击“启动”按钮,会提示我们启动失败。

这因为Windows服务不能像普通窗口程序那样启动,接下来就安装服务。

2.配置

在Service1.cs上右键,选择“查看设计器”,

然后再在上面的空白处,右键选择“添加安装程序”,

这时候,Visual Studio就会自动为我们生成一个ProjectInstaller.cs文件,接下来,右键ProjectInstaller.cs,选择“查看设计器”,就可以看到如下的界面,

可以看到两个控件,点击右击第一个控件,打开属性设计器,将其中的Account设置为LocalSystem(本地服务),

接下来,右击上面的第二个控件,打开属性界面,设置ServiceName,和将其中的StratType设置为Automatic,

接下来,为了测试需要,笔者写一些测试代码:

   public partial class Service1 : ServiceBase{private readonly Timer _MyTimer;public Service1(){InitializeComponent();_MyTimer = new Timer(10*1000); //10秒钟启动一次_MyTimer.Elapsed += _MyTimerElapsed;}protected override void OnStart(string[] args){_MyTimer.Start();}protected override void OnStop(){_MyTimer.Stop();}internal void _MyTimerElapsed(object sender, ElapsedEventArgs e){try{//添加往C盘新建一个文本文件的程序try{string logFileName = @"C:\\log.txt"; // 文件路径
FileInfo fileinfo = new FileInfo(logFileName);using (FileStream fs = fileinfo.OpenWrite()){StreamWriter sw = new StreamWriter(fs);sw.WriteLine("=====================================");sw.Write("添加日期为:" + DateTime.Now.ToString() + "\r\n");sw.WriteLine("=====================================");sw.Flush();sw.Close();}}catch (Exception ex){//  ex.ToString();
}}catch (Exception ex){ }}}

上面的代码,笔者写到Service1.cs类中,该类是Visual Sudio在启动的时候,自动为我们创建好的类文件。观察这个类文件,可以发现,该类继承了ServiceBase,ServiceBase是服务类的基类,也就是说想要创建服务,必需继承这个类,ServiceBase中有两个方法比较常用,分别为OnStart()和OnStop(),顾名思义,OnStart方法在服务启动的时候调用,OnStop方法在服务停止的时候调用。

在测试代码写好后,我们就可以点击 生成》生成解决方案,如果后需修改了,那么需要点击重新生成解决方案:

在解决方案生成好后,接下来就是安装Windows服务了。

3.安装Windows服务

找到上面项目中 bin\debug 目录下生成的exe文件,这里笔者的位置为  D:\Dev\Test\day20171218\MyWindowsService\MyWindowsService\bin\Debug\MyWindowsService.exe

在这个文件夹中,我们看见生成了许多文件,这些文件是这个服务的一些配置和数据库信息,.config就是以前的App.config内容,.如果笔者不想在这个Debug文件夹里安装服务,那么最好把整个Debug文件夹复制过去。然后再打开cmd,进入到.net对应版本的目录中,这里笔者的版本为4.0,可以通过查看 C:\Windows\Microsoft.NET\Framework ,目录下的版本信息,一般情况下,最高版本为当前版本。

在CMD中进入到对应的版本中,

然后通过Installer.exe进行安装,安装的时候,需要指定生成了服务exe文件的位置,比如:

InstallUtil.exe D:\Dev\Test\day20171218\MyWindowsService\MyWindowsService\bin\Debug\MyWindowsService.exe

如果想要卸载,只需要在InstallUtil.exe后面加上/u就可以了,比如:

InstallUtil.exe /u D:\Dev\Test\day20171218\MyWindowsService\MyWindowsService\bin\Debug\MyWindowsService.exe

服务安装好后,就可以启动服务了。

按下“Win+R”打开运行界面框,然后输入services.msc,进入到服务界面,找到自己对应的服务,启动。

在上面的OnStart方法中,我们在C盘下面打印了日志,接下来,打开上面的C盘下面的log.txt,

可以看到日志已经成功打印了。

到这里为止,一个Window Server的服务程序,就完成了,接下来,笔者介绍如何在Visual Studio中调试Windows服务程序。

4.在Visual Studio中调试

Windows服务的调试和普通程序也不一样,

首先在代码设置断点,在上面的_MyTimerElapsed方法中添加Debugger.Launch()方法即可。

这里可以重新生成一下解决方案,然后选择  调试》附加到进程

如果没有,刷新一下就出来了。

接下来,重启一下服务,就可以正常调试了。

5.常见问题

如果安装windows服务的时候,出现报错securiy Exception,那么应该以管理员的身份启动窗口。

如果安装Windows服务的时候,出现System.ComponentModel.Win32Exception,那么是因为在Visual Studio中设置serviceProcessInstaller1时候,没有把Account设置为LcoalSystem.

转载于:https://www.cnblogs.com/HDK2016/p/8056977.html

【C#】C#创建Windows Service服务相关推荐

  1. 【windows service】C# 创建Windows Service(Windows服务)程序

    C# 创建Windows Service(Windows服务)程序 很多年前大概08年做了一个windows桌面程序推送邮件给用户的程序,然后通过windows 计划任务每隔N分钟重复执行. 今天闲暇 ...

  2. C# 创建Windows Service(Windows服务)程序

    工具: Visual Studio Community 2015 写在前面: Windows可以在后台做一些任务,今天分享下Windows Service创建.安装.调试的方法以及一些异常问题的处理 ...

  3. 【已解决】Windows Service服务 出现System.Security.SecurityException: 未找到源,但未能搜索某些或全部事件日志。不可访问的日志: Security。

    bat文件 内容为 cd C:\Windows\Microsoft.NET\Framework\v4.0.30319\ InstallUtil.exe   InstallUtil F:\Windows ...

  4. Windows Service服务 出现System.Security.SecurityException: 未找到源,但未能搜索某些或全部事件日志

    [已解决]Windows Service服务 出现System.Security.SecurityException: 未找到源,但未能搜索某些或全部事件日志.不可访问的日志: Security. 青 ...

  5. 创建Windows Service

    基本参照使用C#创建Windows服务,添加了部分内容 目录 创建Windows Service 可视化管理Windows Service 调试 示例代码 创建Windows Service 选择C# ...

  6. vs.net c# 安装、注册windows service服务,判断服务是否存在,是否启动

    vs.net c# 安装.注册windows service服务,判断服务是否存在,是否启动 一.安装服务: private void InstallService(IDictionary state ...

  7. 如何用C#创建Windows Service

    在.Net中用C#创建Windows Service,其实很简单,按照以下的步骤就可以做出一个简单的Windows Service. 1.首先在创建工程的时候选择Windows Service,这样. ...

  8. Windows Service:用C#创建Windows Service

    现在的.NET框架已经为Windows service的开发提供足够强大的支持,你只需要关注service所要实现的逻辑,而完全不用关心service底层是如何实现的,相比以前用MFC来说,真是质的飞 ...

  9. C#制作Windows service服务系列二:演示一个定期执行的windows服务及调试(windows service)(转载)...

    系列一: 制作一个可安装.可启动.可停止.可卸载的Windows service(downmoon原创) 系列二:演示一个定期执行的windows服务及调试(windows service)(down ...

最新文章

  1. 【学术相关】供参考:刚刚,2021 世界大学学术排名发布!
  2. 好消息:VS 2008 and .NET 3.5 Beta 2 发布了
  3. php gui中文手册,git gui - [ Git中文开发手册 ] - 在线原生手册 - php中文网
  4. pl/sql连接Oracle数据库的方式
  5. php中d是什么文件,后缀php是什么文件
  6. 在Pocket PC/Smartphone智能设备上编写压缩程序(特别简单,任何人都能简单使用)...
  7. Windows Server 2012 搭建DHCP及远程路由访问
  8. Bias and Variance with Mismatched Distributions
  9. 马士兵oracle_,马士兵oracle视频教程学习笔记个人整理
  10. mysql查看锁死的sql,最全指南
  11. cd 命令行进入目标文件夹
  12. perl 中使用 cpan 工具
  13. 定义一个长方形类,定义 求周长和面积的方法,然后定义一个测试了Test,进行测试
  14. Ansible之Inventory定义
  15. 2016元旦台湾自由行
  16. 关于Windows聚焦一直保持一个图不变或者不显示
  17. 简述封装vue组件的过程
  18. 【高德地图API】汇润做爱地图技术大揭秘
  19. 如何使用CMD重置Windows 10中的网络设置
  20. [Inheritance]Collection with Inheritance (eden)

热门文章

  1. Sql Server 2005 ROW_NUMBER 函数实现分页
  2. CSS 伪类与伪元素
  3. JavaScript绑定事件的方法[3种]
  4. asp.net夜话之五:Page类和回调技术
  5. POJ 2186 popular cow 有向图的强联通问题 Tarjan算法
  6. 大数据常考--bitmap用来去重占用内存少
  7. go语言的goconvey
  8. 汇编语言--div指令
  9. shell批量插入数据
  10. 转-D3D中的四元数