目录结构:

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. [JUnit] Introduce to Junit and it annotations

    Check the get started guid https://junit.org/junit5/docs/current/user-guide/#overview-getting-help p ...

  2. [Algorithm] Inorder Successor in a binary search tree

    For the given tree, in order traverse is: visit left side root visit right side // 6,8,10,11,12,15,1 ...

  3. window.btoa

    概述 将ascii字符串或二进制数据转换成一个base64编码过的字符串,该方法不能直接作用于Unicode字符串. 语法 var encodedData = window.btoa(stringTo ...

  4. eclipse启动错误:java.lang.NoClassDefFoundError: org/eclipse/core/resources/IContainer

    转自:http://blog.csdn.net/niu_hao/article/details/9332521 eclipse启动时报错如下:java.lang.NoClassDefFoundErro ...

  5. Android LazyList 从网络获取图片并缓存

    原演示地址 本文内容 环境 演示 LazyList 从网络获取图片并缓存 参考资料 本文是 Github 上的一个演示,通过网络获取歌手专辑的缩略图,并显示在 ListView 控件中.该演示具备将缩 ...

  6. iOS开发技巧 - 使用和定制开关控件(UISwitch)

    1. 初始化加载到视图界面 (Swift) import UIKit class ViewController: UIViewController { // 1. create a property ...

  7. SQL Server 之 附加数据库出现“ 拒绝访问 ”

    错误信息如下图所示,附加数据库时出现“拒绝访问”:   解决方案: 修改拒绝访问的文件的安全权限,这里是修改数据库的.mdf文件的安全权限.

  8. WinForm 之 自定义标题栏的窗体移动

    通过标题栏的鼠标事件实现窗体移动,代码如下: bool m_isMouseDown = false; //窗体是否移动 Point m_mousePos; //记录窗体的位置 /// <summ ...

  9. 微软BI 之SSAS 系列 - 在 SQL Server 2012 下查看 SSAS 分析服务的模型以及几个模型的简单介绍

    在SSDT中部署一个 SSAS 项目到本地服务器上出现错误. You cannot deploy the model because the localhost deployment server i ...

  10. Live555实战之交叉编译live555共享库

    作者:咕唧咕唧liukun321 来自:http://blog.csdn.net/liukun321 能够通过这个链接获得最新的live555源代码:Live555源代码下载 Live555 是一个为 ...