本文版权归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. 线程Thread的基础知识学习

    一.线程的基本概念 1.线程是一个程序内部的顺序控制流. 2.Java的线程是通过java.lang.Thread类来实现的. 3.VM启动时会有一个由主方法{public static void m ...

  2. Python遍历文件夹

    许多次需要用python来遍历目录下文件, 这一次就整理了记录在这里. 随实际工作,不定期更新. import os class FileTraversal: def __init__(self, r ...

  3. Tomcat中JVM内存溢出及合理配置

    Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个Java虚拟机.Tomcat的内存溢出本质就是JVM内存溢出,所以在本文开始时,应该先对Java JVM有关内存方面的知识 ...

  4. 第2章 如何构建布局良好的Windows程序

    01.菜单栏(MenuStrip) 设置快捷键方式: 方式一:1.设置菜单项的Text属性为(打开(&F)), 首先必须按住alt+主菜单快捷键进入到对应的主菜单, 然后直接按F就可以打开子窗 ...

  5. mysql出错:Access denied for user 'root'@'localhost' (using password: YES)

    网站链接mysql数据库的时候,连接不上,并报出错误:Access denied for user 'root'@'localhost' (using password:YES) 这是个相当恼火的问题 ...

  6. One Page Scroll – 实现苹果风格的单页滚动效果

    单页滚动网站已经被广泛使用了有一段时间了,它们对于快速提供信息是很有用的.One Page Scroll 是一个 jQuery 插件,简化了创建此类网站的步骤,只需创建 HTML 结构,进行简单设置, ...

  7. 实例之HTML标签属性

    鼠标放在图片上会显示说明文字的代码 <img src="图片地址" width=620 height=138 border=0 title="说明文字" ...

  8. 一行代码如何控制ipunt框里面值的长度

    <input  type="text"  id="你的id" maxlength="你想要的长度" onkeyup="thi ...

  9. SQLServer表内自关联级联删除

    今天处理SQLServer级联删除遇到了很蛋疼的事. SQLServer 不支持表内自关联级联删除,而MySql和Oracle却支持. 貌似原因是SQLServer 会产生循环级联,就不给这样弄.所以 ...

  10. css3中filter的各种特效

    css3中的filter属性可以说是简单易用且强大,这些效果作用在图片上实现一些特效(也可以作用在vidio上,此处只讨论图片特效). 浏览器兼容性 目前各大浏览器对于css3的兼容已经非常好了,最新 ...