C#开发windows服务如何调试——资料整理
原文标题:C# Windows服务程序如何进行调试
原文地址:https://jingyan.baidu.com/article/456c463b18e1b00a583144b3.html
第一种:
附加到进程
1,首先要对服务进行安装,然后启动服务,如下图所示:

2,打开VS项目,选择菜单 调试->附加到进程 选项,如下图所示:

3,选择服务进程(如果找不到可以勾选 显示所有用户进程 选项)就可以了,找到服务对应的exe程序,如下图所示:

4,在附加到进程的同时 OnStart 函数已经执行完毕,所以对 Onstart 无法调试。这个可以通过设置启动服务延时来加载调试,只需要在计时器Timer初始化的时候,传递一个参数即可,如下图所示:

5,
注意:正常服务的启动时间为30秒左右,当服务启动时间超过30秒会报错!
所以不要在OnStart中做过多的操作,也可以用这种延时的方法启动服务,以防在启动服务时超时。
第二种:
修改源代码(推荐)
找到服务主类中的OnStart方法,由
protected override void OnStart(string[] args)
{
//todo something
}
修改成
public void OnStart()
{
//todo something
}
如下图所示:

注释掉Program.cs文件中的如下代码:
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new Service1()
};
ServiceBase.Run(ServicesToRun);
//修改成
Service1 s1 = new Service1();
s1.OnStart();
//如下图所示:

在OnStart方法中利用F9打断点,然后按下F5就可以进行调试跟踪代码了,如下图所示:

注意:调试时,需要将先前启动的服务首先停止。程序代码编写调试完成后,记得将第1和2步骤的修改还原即可。
--------------------------------------------------
其他参考文章:
文章:Windows服务二:测试新建的服务、调试Windows服务
内容记录日志的地方很有借鉴意义。
文章:https://www.cnblogs.com/dotnet261010/p/6179480.html
文章标题:Windows服务一:新建Windows服务、安装、卸载服务
文章很好的介绍了如何新建和安装服务,当然还有卸载。
安装部分很有借鉴意义,提供了多种方法。
微软资料:https://docs.microsoft.com/zh-cn/dotnet/framework/windows-services/how-to-debug-windows-service-applications
路径:
标题:如何:调试 Windows 服务应用程序
比较全面简洁。
文章:c#写windows服务
示例代码很好,不过具体细节不详细应该都能看懂。
作者的文章有很多赞同。
很好用的方法。
代码示例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceProcess;
using System.Text; namespace WindowsService1
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
static void Main()
{
Service1 s = new Service1(); if (Environment.UserInteractive)
{
s.DebugStart(); Console.ReadKey(); s.DebugStop();
}
else
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[] { s };
ServiceBase.Run(ServicesToRun);
}
}
}
}
关键就在对Environment.UserInteractive的判断上,
请看MSDN上面的解释:
获取一个值,用以指示当前进程是否在用户交互模式中运行。
UserInteractive 属性为运行时无用户界面的 Windows 进程或一个服务(如 IIS)报告 false。 如果此属性为 false,请不要显示模式对话框或消息框,因为没有用来与用户进行交互的图形用户界面。
http://msdn.microsoft.com/zh-cn/library/system.environment.userinteractive(v=VS.100).aspx
然后看一下Service1.cs中的代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text; namespace WindowsService1
{
public partial class Service1 : ServiceBase
{
public Service1()
{
InitializeComponent();
} protected override void OnStart(string[] args)
{
this.ServiceStart();
} protected override void OnStop()
{
this.ServiceStop();
} internal void DebugStart()
{
this.ServiceStart();
} internal void DebugStop()
{
this.ServiceStop();
} private void ServiceStart()
{
// TODO: } private void ServiceStop()
{
// TODO:
} }
}
最后:更改Project的输出类型
右击该Project,点击Properties,在Application标签中,更改Output Type为Console Application。
OK啦,按F5试试
大佬果然是大佬啊,学习了。
C#开发windows服务如何调试——资料整理的更多相关文章
- C# 开发的windows服务 不能调试——讨论整理
CSDN的标题:C# 开发的windows服务 不能调试 System.Diagnostics.Debugger.Launch();在想加断点的地方加入这行,是进入断点的,可以进行调试,我的是xp系统 ...
- C#开发Windows服务 附简单实例实现禁止QQ运行
本实例主要实现下面三个基本功能 1.C#开发windows服务 2.禁止QQ等程序运行 3.为windows服务创建自动安装程序 下面针对这三个基本功能进行实现 一.C#开发windows服务 Win ...
- c#金额转换成中文大写金额 .Net开发Windows服务
c#金额转换成中文大写金额 2018-08-24 转别人 c#金额转换成中文大写金额 /// <summary> /// 金额转换成中文大写金额 /// </summary> ...
- C#常规开发Windows服务
.Net平台下开发Windows服务的支持库很多,除了通过标准的Windows服务项目,还有一些优秀的开源架构比如:TopSelf:本文以常规项目为例 一.开发 1.新建[Windows服务] 项目: ...
- 使用Visual Studio 2015 Community 开发windows服务
昨天研究在.NET下开发Windows服务程序,期间遇到一些小问题,这里仅将自己的开发过程和需要注意的地方写下和广大网友分享…… 1.基础 Windows服务是指系统启动时能够自己运行的程序.W ...
- C#制作Windows service服务系列二:演示一个定期执行的windows服务及调试(windows service)
系列一: 制作一个可安装.可启动.可停止.可卸载的Windows service(downmoon原创) 系列二:演示一个定期执行的windows服务及调试(windows service)(down ...
- VS2013开发Windows服务项目
这篇随笔里,我将介绍如何用VS2013开发Windows服务项目,实现的功能是定时发送电子邮件. 开发环境:VS2013,SQL Server2008,采用C#语言开发 步骤一:创建Windows服务 ...
- C#开发Windows服务详细流程
1.Windows服务简单介绍 Windows服务程序是在Windows操作系统下能完成特定功能的可执行的应用程序,主要用于长时间运行的功能或者执行定时任务.一般情况下,用户不能通过用户界面来安装和启 ...
- 使用Topshelf开发Windows服务、log4net记录日志
开发windows服务,除了在vs里新建服务项目外(之前有写过具体开发方法,可点击查看),还可以使用Topshelf. 不过使用topshelf需要.netframework 4.5.2版本,在vs2 ...
随机推荐
- 【ARM-Linux开发】使用QT和Gstreanmer 遇到的一些问题
1.如果出现错误,可能是在安装UCT PCRF时,相关组件不全,略举两个碰到的错误. 1)curl/curl.h:No such file or directory --可能原因是libcurl及相关 ...
- 最新 好未来java校招面经 (含整理过的面试题大全)
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿. 好未来等10家互联网公司的校招Offer,因为某些自身原因最终选择了 好未来.6.7月主要是做系统复习.项目复盘.Leet ...
- web 中常用的两种上传文件的方法总结
这里我们来总结整理一下常用的两种文件上传方式以及要注意的东西: 1.springmvc .MultipartFile 的上传方式. 2.org.apache.commons.fileupload 使用 ...
- Memcache安装配置
介绍 Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像.视频.文件以及数据库检索的结果等.简单的说就是将数据调 ...
- C#基础知识学习 linq 和拉姆表达式一
两个方法对比 第二种方法 对比学习 拉姆表达 linq 用法
- 计算属性和mathod的对比
methods:定义函数 调用的是 函数名() 用一次则需要调用一次,效率低 computed:定义函数 调用的是 函数名 只调用一次,因此效率高
- 点亮文字(CSS)
html <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8& ...
- wordPress设计网页实践
我希望能设计出世界上最美的画面! 首先进入你自己建立的网站http://localhost:8079/Frank,如上图所示.注意,编辑页面时,要可以上外网,否则wordPress的插件会下载出错! ...
- mui 打包发布ios 测试
1.首先在Hbuilder新建一个app项目,把你的代码放进来 2.在manifest.json里设置你想要的一切,图标,应用名,描述,入口页面等等等,然后再配置好你程序里需要用到的模块权限,按需配置 ...
- [转帖]关于DDR4内存颗粒、单双面、主板布线和双通道的那些事儿
我们200期的期中测试大家都做了吧,今天我们放出了完整的答案,想知道自己错在哪儿的同学赶紧过去看哟=><这次期中考试你拿到满分了吗?没有就快去补习吧> https://www.exp ...