本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作。

阅读目录

本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作。

介绍

  有时候不可避免的要建些Windows服务。既然写代码,就需要调试,由于这个东西搞的人不多,每个人调试的方法也不全,所以在下在这里小结一下调试方法。

搭建环境

一:创建一个Window Service

  文件->新建项目->Windows 服务。

  然后我们直接运行试试,然后提示如下:

  好吧,我们就依他的意思,加个服务安装程序和些相关的引用及其他,结果如下:

  

  这样我们的环境就基本搭建好了,然后就是服务的安装,运行bin\Debug\Install\install.bat即可。

调试方式

一:普通调试

  msdn上指出“必须从服务控制管理器的上下文中而不是 Visual Studio 中运行服务。 因此,调试服务不像调试其他 Visual Studio 应用程序类型一样简单。 要调试服务,必须启动该服务,然后将调试器附加到该服务正在其中运行的进程中。 然后你可以使用所有 Visual Studio 的标准调试功能来调试你的应用程序”。

  所以我们启动服务,然后通过vs附件该服务进程,然后就可以调试了。如下:

二:特殊调试

  如果我们不想创建服务就想调试代码,其实可以采用其他的替代方式进行,只不过要改代码。

  我们找到程序的入口:Program.cs。

  原代码如下:

     static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
static void Main()
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new ServiceDebug()
};
ServiceBase.Run(ServicesToRun);
}
}

  修改后代码如下:

         protected override void OnStart(string[] args)
{
Timer timer = new Timer();
timer.Interval = ;
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
timer.Start(); } private void timer_Elapsed(object sender, ElapsedEventArgs e)
{ } protected override void OnStop()
{
} public void Test(string[] args)
{
OnStart(args);
}
     static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
static void Main()
{
ServiceDebug service = new ServiceDebug();
service.Test(null); while (true)
{
System.Threading.Thread.Sleep();
}
return; ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new ServiceDebug()
};
ServiceBase.Run(ServicesToRun);
}
}

  这样,我们就可以进行调试了。

二:OnStart常规调试

  有时候我们想正常的调试Onstart方法,但是,启动服务后这个方法已经运行了,那么我们应该怎么调试捏。

  我们可以在Onstart方法体前面加个Debugger.Launch();就可以很愉快的调试了。如下:

         protected override void OnStart(string[] args)
{
Debugger.Launch(); Timer timer = new Timer();
timer.Interval = ;
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
timer.Start(); }

  启动服务后弹出如下:,然后选中对应的解决方案即可。

Demo下载

源码下载

本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作。

Windows服务调试小结(附Demo)的更多相关文章

  1. Windows服务调试状态下用Console启动

    最近一直在用服务,发现服务也没有那么难调试. Windows服务调试状态下用Console启动:步骤分两步 第一步改Program,启动代码 static class Program { /// &l ...

  2. Windows服务调试

    Windows 服务(附服务开发辅助工具) 转: http://www.cnblogs.com/BoyXiao/archive/2011/08/07/2130208.html 近来在 Windows ...

  3. C#windows服务调试技巧

    1.创建项目 2.为了方便调试,设置为控制台程序 3.修改Service1代码 4.修改Main代码 这样当使用-console方式启动时,就是以普通的控制台方式启动,方便调试程序. 5.其它安装之类 ...

  4. Windows服务二:测试新建的服务、调试Windows服务

    一.测试Windows服务 为了使Windows服务程序能够正常运行,我们需要像创建一般应用程序那样为它创建一个程序的入口点.像其他应用程序一样,Windows服务也是在Program.cs的Main ...

  5. .net windows 服务创建、安装、卸载和调试

    原文:http://blog.csdn.net/angle860123/article/details/17375895 windows服务应用程序是一种长期运行在操作系统后台的程序,它对于服务器环境 ...

  6. windows服务

    .net windows 服务创建.安装.卸载和调试   原文:http://www.cnblogs.com/hfliyi/archive/2012/08/12/2635290.html 我对例子做了 ...

  7. 创建Windows服务

    windows服务应用程序是一种长期运行在操作系统后台的程序,它对于服务器环境特别适合,它没有用户界面,不会产生任何可视输出,任何用户输出都回被写进windows事件日志.计算机启动时,服务会自动开始 ...

  8. 创建第一个windows服务

    windows服务应用程序是一种长期运行在操作系统后台的程序,它对于服务器环境特别适合,它没有用户界面,不会产生任何可视输出,任何用户输出都回被写进windows事件日志. 计算机启动时,服务会自动开 ...

  9. Windows服务的创建,安装,卸载

    我公司项目的产线系统要与WMS物流系统做借口对接,需要我创建一个windows服务的项目,里面含有7个服务 创建Windows服务: 1.如图:点击 windows->经典桌面->wind ...

随机推荐

  1. Android使用SQLite数据库(4)

    读取SQLite数据库中的字符串字段,使用Cursor的getString方法(其他类型的字段也有相应的读取方法): public abstract String getString (int col ...

  2. MySQL知识总结

    一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- ...

  3. 从零开始学Python04作业思路:模拟ATM电子银行

    标签(空格分隔):Python 一,程序文件说明 程序分为5个组成部分 bin:放置Python程序的启动接口文件 通过Python命令启动文件夹内文件即正常执行Python程序 例如:ATM_sta ...

  4. RSA加密解密(python版)

    RSA的算法涉及三个参数,n.e.d. 其中,n是两个大质数p.q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度. e1和d是一对相关的值,e可以任意取,但要求e与(p-1)*(q-1)互质: ...

  5. mybatis There is no getter for property named 'xxxx

    mybatis There is no getter for property named 'xxxx 360反馈意见截图16230322799670.png http://blog.sina.com ...

  6. Linux命令详解之—less命令

    Linux下还有一个与more命令非常类似的命令--less命令,相比于more命令,less命令更加灵活强大一些,今天就给大家介绍下Linux下的less命令. 更多Linux命令详情请看:Linu ...

  7. ViewHolder被设计成静态内部类的作用

    当你的内部类不需要依赖于外界的属性或方法等,而又想提供给外界使用,可以采取静态内部类的方式来写 其中static的作用是可以提供给外界调用,比如说类名.内部类这种方式 而ViewHolder的实际是为 ...

  8. [翻译] Autofac 中注册的概念

    原文链接:http://docs.autofac.org/en/latest/register/registration.html 所谓注册组件,是指创建 ContainerBuilder 的实例,并 ...

  9. IO复用_select函数

    select函数: #include <sys/select.h> #include <time.h> #include <sys/types.h> #includ ...

  10. [Android] WebView内的本地网页,使用XMLHttpRequest读取本地档案

    [Android] WebView内的本地网页,使用XMLHttpRequest读取本地档案 问题情景 在Android里,可以使用WebView来呈现本地或是远程的网页内容.但是在显示本地网页时,如 ...