调试Windows Service
调试Windows Service
使用一般的调试方法调试不了Windows Servers,所以参考了一些调试方法
我服务源码中使用了Timer,注意不能使用工具箱内的Timer,用System.Timers.Timer timer = new System.Timers.Timer()代替;
timer.Elapsed事件委托绑定的方法第三种方法调试的时候无法使用断点,不是timer不运行,目前不知道什么原因,所以调试时把代码放到OnStart()中调试。
默认服务名为Service1,改服务名的时候注意几个地方都要改




using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;
using System.Web;
using System.Data.SqlClient;
using System.Threading;
using System.Configuration;
using SAP.Middleware.Connector;
using TimerService.Helper;
using TimerService.JsonConvert;
using System.ServiceProcess;
using Newtonsoft.Json;
using System.Timers; namespace TimerService
{
public partial class TimerService : ServiceBase
{ System.Timers.Timer timer = new System.Timers.Timer();
public TimerService()
{
InitializeComponent();
timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Tick);
timer.Interval = 2000;
} //protected override void OnStart(string[] args)
public void OnStart()
{
timer.Enabled = true;
timer.Start();
} protected override void OnStop()
{
timer.Enabled = false;
timer.Stop();
} private void timer_Tick(object sender, ElapsedEventArgs e)
{
//你的代码
}
}
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks; namespace TimerService
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
static void Main()
{
//ServiceBase[] ServicesToRun;
//ServicesToRun = new ServiceBase[]
//{
// new TimerService()
//};
//ServiceBase.Run(ServicesToRun);
TimerService obj = new TimerService();
obj.OnStart();
}
}
}

方法1:写日志
是最传统的调试windows service方法,也是大家在调试service 比较管用的方式,但是,调试起来还是不太明朗。你要在你认为可能出现错误的地方全部添加写日志的方法。我上面的代码就采用了AddTextLine 函数实现的这种方法。
方法2:附加进程
附加进程的方法可以像调试正常的widows程序一样,设置断点进行单步调试。但是,我必须在安装启动服务后,才可以进行附加此服务进程,可在附加的同时OnStart 函数已经执行完毕,所以对Onstart 无法调试。但是我可以通过设置启动服务延时来加载调试。
步骤如下:
1,设置启动服务延时,


private System.Timers.Timer timerDelay;
protected override void OnStart(string[] args)
{
try
{
///delay start the SynData 30seconds
timerDelay = new System.Timers.Timer(30000);
timerDelay.Elapsed += new System.Timers.ElapsedEventHandler(timerDelay_Elapsed);
timerDelay.Start();
}
catch (Exception ex)
{
this.PrintExceptions(ex);
}
}
void timerDelay_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
timerDelay.Enabled = false;
timerDelay.Close();
//你要加的代码
//.To do


..
}


注意:正常服务的启动时间为30秒左右,当服务启动时间超过30秒会报错!,所以不要在OnStart中做过多的操作,也可以用这种延时的方法启动服务,以防在启动服务时超时。
2、首先要对服务进行安装,然后启动服务。
3、打开vs2005 调试—>附加到进程,选择你的服务进程(如果找不到可以勾选 显示所有用户的进程),就可以了。

方法3:
我认为是这次调试对我帮助最大。
在Main 函数中,注释掉原有自动生成的代码,注意红字部分是要根据自己的服务名字来手工添加的
// ServiceBase[] ServicesToRun;
// 同一进程中可以运行多个用户服务。若要将
// 另一个服务添加到此进程中,请更改下行以
// 创建另一个服务对象。例如,
//
// ServicesToRun = new ServiceBase[] {new Service1(), new MySecondUserService()};
//
//ServicesToRun = new ServiceBase[] { new TeamWorldService() };
//ServiceBase.Run(ServicesToRun);
//******************************************
TeamWorldService obj = new TeamWorldService();
obj.OnStart();
//******************************************
然后把 protected override void OnStart(string[] args) 改为 public void OnStart()。
,设置你的断点,按 F5 运行就可以调试了。
调试完成后安装启动服务
原文链接:http://www.cnblogs.com/KSalomo/p/6519878.html?tdsourcetag=s_pctim_aiomsg
调试Windows Service的更多相关文章
- C#创建、安装、卸载、调试Windows Service(Windows 服务)的简单教程
前言:Microsoft Windows 服务能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序.这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面.这 ...
- Win7中不能调试windows service
多年前玩过一次windows service,觉得挺简单的. 这次工作要维护产品中的windows service,发现不是那么简单,vs附加调试器的窗体中无法找到windows service进程. ...
- windows Service 之调试过程(附加到进程里调试,而且启动时间不能超过30秒)
最近第一次用C#写了一个windows service ,其实实现的内容比较简单.就是启动remoting 连接,但是调试相对初次写windws service 的我来说,比较烦.没有经验,而且没办法 ...
- C#创建Windows Service(Windows 服务)基础教程
Windows Service这一块并不复杂,但是注意事项太多了,网上资料也很凌乱,偶尔自己写也会丢三落四的.所以本文也就产生了,本文不会写复杂的东西,完全以基础应用的需求来写,所以不会对Window ...
- C# Windows Service 基础
Windows Service这一块并不复杂,但是注意事项太多了,网上资料也很凌乱,偶尔自己写也会丢三落四的.所以本文也就产生了,本文不会写复杂的东西,完全以基础应用的需求来写,所以不会对Window ...
- C#创建一个Windows Service
Windows Service这一块并不复杂,但是注意事项太多了,网上资料也很凌乱,偶尔自己写也会丢三落四的.所以本文也就产生了,本文不会写复杂的东西,完全以基础应用的需求来写,所以不会对Window ...
- 使用Advanced Installer 13.1打包发布 Windows Service服务程序
原文: 使用Advanced Installer 13.1打包发布 Windows Service服务程序 项目中需要用到一个定时推送案件状态的需求,本人小菜一只,在同事建议下要写成一个windows ...
- C# 创建Windows Service(Windows服务)程序
本文介绍了如何用C#创建.安装.启动.监控.卸载简单的Windows Service 的内容步骤和注意事项. 一.创建一个Windows Service 1)创建Windows Service项目 2 ...
- Windows Service 开发,安装与调试
Visual Studio.net 2010 Windows Service 开发,安装与调试 本示例完成一个每隔一分钟向C:\log.txt文件写入一条记录为例,讲述一个Windows Servic ...
随机推荐
- String转换为Map
Map<String,Integer> rulsMap = new Gson().fromJson(cachedobj.toString(),new TypeToken<Map< ...
- Hadoop基础-Hdfs各个组件的运行原理介绍
Hadoop基础-Hdfs各个组件的运行原理介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.NameNode工作原理(默认端口号:50070) 1>.什么是NameN ...
- Datatables 完整的datatables案例
这里只做收集网上一些很棒的博客!!!真的是很棒!!! https://www.cnblogs.com/luckychan/articles/6160934.html
- Golang基础
Golang官方 https://golang.org/ 使用命令,在本地启动一个go官网 go doc -http=: 访问127.: golang标准库api文档 https://studygol ...
- pd.qcut, pd.cut, df.groupby()等在分组和聚合方面的应用
pd.qcut, pd.cut, df.groupby()等在分组和聚合方面的应用 量化交易里, 需要进行大量的分组和统计, 以方便自己处优势的位置/机会. 比如对股价进行趋势分析, 波动性分析, 量 ...
- JavaScript实战总结
javascript中数组的22种方法:http://www.cnblogs.com/xiaohuochai/p/5682621.html 1.js闭包 2.eval函数 eval(“字符串”) 将 ...
- TCP输出和UDP输出
一.TCP输出 1)对端必须确认收到的数据,伴随来自对端的ACK的不断到达,本端TCP至此才能从套接字发送缓冲区中丢弃 已确认的数据:TCP必须为已发送的数据保留一个副本,直到它被对端确认为止 2)每 ...
- Unity3d跨平台原理
知乎的一个提问:unity3d跨平台原理 一些资料: IL IL是.NET框架中中间语言(Intermediate Language)的缩写.使用.NET框架提供的编译器可以直接将源程序编译为.exe ...
- 【Gradle】Gradle环境配置
Windows环境 下载 作者下载的是gradle-4.1-all.zip,下载地址:http://services.gradle.org/distributions 环境配置 GRADLE_HOME ...
- Eclipse文件路径
经常我们需要读取某个文件,一般情况下,在Eclipse工程中,路径为./src/....