C# 开发的windows服务 不能调试——讨论整理
CSDN的标题:C# 开发的windows服务 不能调试
System.Diagnostics.Debugger.Launch();在想加断点的地方加入这行,是进入断点的,可以进行调试,我的是xp系统,win7 没试过
在VS中,设置相关断点,启动调试,再在工具栏中选择 调试->附加到进程..., 选择您的服务, 确定
好了,你可以进行断点调试了。
建议你先在控制台跑,搞好了再改造成Windows服务。
确实需要“控制台运行”。在控制台模式下,程序初始化结束后进入Pending状态即可(ManualResetEvent.WaiOne())。
开发专业的服务器程序,应该注重测试而不是调试。在测试引擎的操作下,每天对各种服务功能进行上万次地模拟调用,并且是并发调用测试。在测试引擎的辅助下,才能去驱动出好的开发过程。服务器程序通常因为必须多线程编程而变得情况非常复杂,(从实践来说)根本不可能像软件作坊里的学生编写程序那样以调试操作来驱动出开发过程。
控制台模式下,程序初始化结束后进入Pending状态即可(ManualResetEvent.WaiOne())。并且通常需要在控制台下打印通讯内容,以便了解一些特别的系统故障的原因。
控制台下作为服务程序都OK了,发布时发布为windows service调用同样的dll中的业务过程就行了。winservice的程序跟控制台程序的差别只有几行语句的差别,没有什么大的差别。
-----------------------
首先,我可以明确的告诉你,服务是可以调试的!
因为我刚刚开发完一个
调试的时候,是用附加到进程来加载的,
这里要注意的是,你的代码必须和正在运行的服务是同一份代码,不然设置不了断点的。
如果调试服务的启动部分的话,因为附加到进程是手动完成的,需要一定的时间,所以服务很快就运行过了服务的开始部分,
这种情况我是在服务里面加上一个睡眠,好比如睡眠10s,在这10s里,我就附加到进程,设置断点等。。
----------------------
服务的确可以调试,但是相对控制台或者网页又有点不太一样,服务有一点特殊
就是windows定义它启动或停止时超时,即OnStart事件中的代码执行时间是有限制的
如果你把断点直接打在那个里面是没有用的
原因是:那段代码仅当服务处在启动过程中(StartPending)时在运行,启动之后(VS附加能看到进程),那段代码早已经执行完了
你可以将执行(断点)的代码,放到子线程中,服务启动时,启动子线程
由于从服务启动到你手动附加进程已经过去了好几秒了,所以在子线程中先Sleep一段时间,以免你附加成功之后,代码早已经执行过了,调试的目的也就达不到了
不过那样调试实在麻烦,
其实实现项目中,一般都会将业务放在单独的.Net类库中,然后用带界面的程序引用,再直接调试就行了
-------------------
文章:C#创建Windows Service(Windows 服务)基础教程
--------------
这个原因是这样的:
一般您看到的是这一个:[你的服务名称].vshost.exe,这个不是你的服务进程。
在附加到进程的界面中,要勾选“显示所有用户进程”,
就能看到您的服务进程了:[你的服务名称].exe
-------------
只可惜附加进程的方式只能调试停止和进程休眠或时间间隔的操作,对于服务启动时的调试却不行,其实可以做下面操作:
方案一:
1. 更改项目的输出类型由Windows 应用程序为控制台应用程序
2. 项目--属性--在调试设置页面启动选项的命令行参数中随意输入几个字符,如DEBUG
3. 关键的地方来了,转到Program.cs页面的Main函数处,手动加入一个参数,如static void Main(string[] args)
4. 在Main中更改代码
if(args.Length==0)//这是服务启动的条件
{
//将原有生成的启动服务的代码拷贝至此处
}
else//即有启动选项的命令行参数DEBUG了
{
//将服务中的类当作一个普通类来使用即可,如
***Service srv = new ***Service();
Console.Read();
}
5. 调试时,直接在项目处点击鼠标右键,选择 调试—启动新实例,这样就进入了else模式,就可以不用作为服务来运行了。
方案二:
可参考:http://blog.csdn.net/sqqyq/article/details/8248266
C# 开发的windows服务 不能调试——讨论整理的更多相关文章
- C#开发windows服务如何调试——资料整理
原文标题:C# Windows服务程序如何进行调试 原文地址:https://jingyan.baidu.com/article/456c463b18e1b00a583144b3.html 第一种: ...
- C#制作Windows service服务系列二:演示一个定期执行的windows服务及调试(windows service)
系列一: 制作一个可安装.可启动.可停止.可卸载的Windows service(downmoon原创) 系列二:演示一个定期执行的windows服务及调试(windows service)(down ...
- VS2013创建Windows服务与调试服务
1.创建Windows服务 说明: a)Description 服务描述,直接显示到Windows服务列表中的描述: b)DisplayName 服务显示名称,直接显示到Windows服务列表中的名称 ...
- 通过asp.net程序来控制自己开发的windows服务
public ActionResult ListService() { //获取已经保存好的windows服务名称 IList<Model.ReportServicesInfoEnt> L ...
- Windows服务的调试
1.服务为其他程序调用的情况:首先停止服务,在项目中设置断点,重新启动服务,点击项目中工具,附加到进程,运行调用服务的程序,即可进入之前设置的断点,进而进行调试. 2.服务内方法为自动执行的情况:首先 ...
- .net开发windows服务
最近一个月都异常的繁忙,项目进度非常的紧,回头看看自己的blog,整整一个5月都没有一篇文章,非常惭愧,现在补几篇文章,介绍一下我最近关注的技术.这篇文章将介绍Windows服务程序的开发.摘要:本文 ...
- C#开发可以可视化操作的windows服务
使用C#开发自定义windows服务是一件十分简单的事.那么什么时候,我们需要自己开发windows服务呢,就是当我们需要计算机定期或者一 直执行我们开发的某些程序的时候.我经常看到许多人开发的win ...
- 【C#】开发可以可视化操作的windows服务
使用C#开发自定义windows服务是一件十分简单的事.那么什么时候,我们需要自己开发windows服务呢,就是当我们需要计算机定期或者一直执行我们开发的某些程序的时候.这里我以一个WCF的监听服务为 ...
- C#开发人员能够可视化操作windows服务
使用C#开发自己的定义windows服务是一个很简单的事.因此,当.我们需要发展自己windows它的服务.这是当我们需要有定期的计算机或运行某些程序的时候,我们开发.在这里,我有WCF监听案例,因为 ...
随机推荐
- C#登录SSH执行命令,下载文件
前言 批量登录SSH执行命令 ,把应急响应中的日志文件下载回来. 代码实现 Renci.SshNet编译出DLL,引用. using System; using System.Collections. ...
- RH124-3 目录结构_转
在linux里安装的时候,是可以指定某分区装在某文件夹里 目录意义 /bin 存放命令,不可以在装系统单独挂载分区 /home /dev 存放硬件设备 不可以单独挂载分区 /boot 500M 和系统 ...
- EventBus使用的坑
最近使用eventbus发送通知,在想该怎么携带List集合数据.于是尝试直接发送List. 使用一次,正常接收.使用两次,出现类转换异常.原来在接收List类型的消息时,并不会管List内的泛型,是 ...
- wordpress 后台无法登录 网站内容缺失
昨天网站又突然不正常了,前两天都是好的.. 具体来说就是wp后台登录不进去,一直在登录页跳转,与此同时服务器上其他网站也有这个问题,而且有些网站的板块内容也缺失了, 所以首要就是要登录进后台看看是不是 ...
- 2019杭电多校一 L. Sequence (NTT)
大意: 给定序列$a$, 给定$m$个操作, 求最后序列每一项的值. 一共$3$种操作, 其中第$k$种操作将序列变为$b_i=\sum\limits_{j=i-kx}a_j$, $(0\le x,1 ...
- Oracle数据库导出txt格式工具sqlload2使用
开发需求:需要在数据库中查询数据,最终得到cxv表格形式数据. 使用plsql导出70M数据量非常慢,本次使用sqlload2工具,导出文本txt文本格式. 1)导出txt文本文件$ ./sqluld ...
- .net core下对于Excel的一些操作及使用
原文:.net core下对于Excel的一些操作及使用 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.cs ...
- Asp.Net Core 存储Cookie 的问题
Asp.Net Core 2.1生成的项目模板默认实现了<欧洲常规数据保护法规 (GDPR)>支持.这就使得我们的程序要想成功的存储除了用户身份以外的cookie通常是需要用户同意的. 3 ...
- ROUTE: route addition failed
ROUTE: route addition failed 1)报FlushIpNetTable failed on interface错误 应对:以管理员身份运行OpenV-P-N 2)报Warnin ...
- 分布式事务(ACID特性、CAP定律)
普通事务和分布式事务的区别: 普通事务就是一般所说的数据库事务,事务是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成.当事务被提交给了DBMS(数据库管理系统),则DBMS(数 ...