目录结构:

contents structure [+]

最近写了一个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秒钟启动一次
_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.

【C#】C#创建Windows Service服务的更多相关文章

  1. C#创建Windows Service(Windows 服务)基础教程

    Windows Service这一块并不复杂,但是注意事项太多了,网上资料也很凌乱,偶尔自己写也会丢三落四的.所以本文也就产生了,本文不会写复杂的东西,完全以基础应用的需求来写,所以不会对Window ...

  2. C# Windows Service服务的创建和调试

    前言 关于Windows服务创建和调试的文章在网络上的很多文章里面都有,直接拿过来贴在这里也不过仅仅是个记录,不会让人加深印象.所以本着能够更深刻了解服务项目的创建和调试过程及方法的目的,有了这篇记录 ...

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

    本文介绍了如何用C#创建.安装.启动.监控.卸载简单的Windows Service 的内容步骤和注意事项. 一.创建一个Windows Service 1)创建Windows Service项目 2 ...

  4. quartz.net结合Topshelf实现windows service服务托管的作业调度框架

    topshelf可以很简单方便的实现windows service服务,详见我的一篇博客的介绍 http://www.cnblogs.com/xiaopotian/articles/5428361.h ...

  5. Windows Service 服务搭配FluentScheduler实现定时任务调度

    Windows Service 服务 创建Windows Service 项目 创建一个Windows Service项目,并将项目名称改为 TaskWindowService 在解决方案资源管理器内 ...

  6. .net core+topshelf+quartz创建windows定时任务服务

    .net core+topshelf+quartz创建windows定时任务服务 准备工作 创建.net core 控制台应用程序,这里不做过多介绍 添加TopShelf包:TopShelf: 添加Q ...

  7. 创建Windows Service

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

  8. 震惊!Windows Service服务和定时任务框架quartz之间原来是这种关系……

    过场CG:   接到公司领导的文件指示,“小熊”需要在6月底去海外执行一个行动代号为[定时任务]的营救计划,这个计划关系到公司某个项目的生死(数据安全漏洞),作战部拟定两个作战方案: 方案一:使用务定 ...

  9. .Net Windows Service(服务) 调试安装及System.Timers.Timer 使用

    Windows Service(服务)  是运行在后台的进程 1.VS建立 Windows 服务(.NET Framework) 2.添加Timer 双击Service1.cs可以拖控件(System ...

随机推荐

  1. ARM 汇编的mov操作立即数的疑问

    1. 因为对arm汇编有些指令还不能理解,特别是一些相似功能指令间的区别.偶然在网上搜到"faq ARM assembly",其中描述的几个问题还是值得好好研究一下. 2. 慢慢的 ...

  2. HTTP认证与https简介

    HTTP请求报头: Authorization HTTP响应报头: WWW-Authenticate  HTTP认证是基于质询/回应(challenge/response)的认证模式. HTTP认证 ...

  3. JS调试必备的5个debug技巧_javascript技巧

    JS调试必备的debug调试javascript技巧 1. debugger; 我以前也说过,你可以在JavaScript代码中加入一句debugger;来手工造成一个断点效果.需要带有条件的断点吗? ...

  4. Android Activity 及其子类

    本文内容 ListActivity TabActivity LauncherActivity ExpandableListActivity PerferenceActivity 这些类都继承 Acti ...

  5. TCP/IP, UDP, ICMP, ARP协议族简介--纯图慎点

    ISO/OSI的网络模型架构 TCP/IP参考模型的层次结果 以太网头部结构 以太网属于数据链路层, 属于最基本的协议结构 IP协议 IP协议为TCP, UDP, ICMP提供最基本的数据传输通路 I ...

  6. angular5中使用全局变量

    创建全局变量ts文件,然后引入 创建globals.ts文件: export const base_path = "http://localhost/api/index.php/Home&q ...

  7. Ganglia监控Hadoop集群的安装部署

    一. 安装环境 Ubuntu server 12.04 安装gmetad的机器:192.168.52.105 安装gmond的机器:192.168.52.31,192.168.52.32,192.16 ...

  8. NUMA总结。

    vsphere 5.1性能最佳实践http://www.vmware.com/pdf/Perf_Best_Practices_vSphere5.1.pdf vNUMA 要求:硬件版本8以上. 1.整个 ...

  9. 通过adb命令在Android设备中执行Java命令, 并调用so文件。

    一.难点一:无法复制so文件到/system/lib或者/vendor/lib下,提示只读 解决方法: 2.使用android device monitor放库进入到 /system/lib出现只读权 ...

  10. spring + mybatis合集

    一.Spring 1. IoC 什么是IoC: 跟我一起学Spring 3(4)–深入理解IoC(控制反转)和DI(依赖注入) Spring中IoC的优点与缺点 spring Ioc 实践 IoC如何 ...