问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何调试windows service

发布网友 发布时间:2022-04-25 23:09

我来回答

1个回答

热心网友 时间:2022-06-18 13:35

第一方法:
这种方法其实说起来不叫调试,也是一种笨办法,就是用MessageBox把一些程序的中间信息输出来,方便你找出程序是在哪个地方出问题了,你也可以在try catch中使用,用MessageBox把异常弹出来,这种方法也比较直观。可惜,实现起来也有问题。我们首先要添加using System.Windows.Forms;的引用,然后加上一行代码MessageBox.Show(ex.ToString(),"Error");本以为这样说行了,可是把服务重新编译生成,并安装启动后,它并没有弹出框来。百思不得其解。幸好,在服务的程序里面,启用了系统的日志,它会把相关的异常记录到系统日志中去,在“计算机管理”的“事件查看器”里面可以找到。果然发现了一个,
clip_image002
显示的信息是
“当应用程序不是以UserInteractive 模式运行时显示模式对话框或窗体是无效操作。请指定 ServiceNotification 或 DefaultDesktopOnly 样式,以显示服务应用程序发出的通知。”
直接百度,找到了一个答案,原来是调用MessageBox时,还需要设置它的MessageBoxOptions属性为DefaultDesktopOnly。修改如下:
MessageBox.Show(ex.ToString(),"Error", MessageBoxButtons.OK, MessageBoxIcon.Information,MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly);
然后再次重新编译,安装并启动,OK,顺利的弹出了错误的信息。

第二种方法:
第二种方法就是真正的调试,其实Windows服务还是可以调试的,应该说任何一种类型的程序都应该能调试,别人在开发编译器的时候就人考虑到的。下面来看具体的方法。
我们知道,任何一个程序都有一个对应的进程,如果你的Windows服务启动后,也会有一个对应的进程。通过任务管理器,就能看到。
我们可以通过VS编译器里面,提供的“附加到进程”这个功能来进行调试。首先你打开你的Windows服务源程序,在里面设置一个断点,例如在OnStart方法中protected override void OnStart(string[] args){}中,然后把你的服务启动,启动过后,在VS的“调试”一栏中找到“附加到进程”
clip_image004
在进程列表里面找到你的进程,
clip_image006
如果没有的话,就把左下角的“显示所有用户的进程”前面的勾选中,然后你就可以找到你的Windows服务的进程了,然后点击确定即可。
点击确定后,可能你等了半天,也没看见它命中断点。哈哈,不要急,前面说漏了一点,我们是先启动的服务,然后再附加的进程,因为服务一启动,就会执行OnStart方法,这时,我们还没有把这个服务的进程附加到VS中去呢?所以在OnStart方法中设置的这个断点肯定不会命中。所以我们需要想个办法,也就是加一个定时器,我们在OnStart方法中启动这个定时器,然后设置这个定时器的时间间隔为1分钟,然后在这个定时器的事件中去设置一个断点。这样把服务重新生成,安装并启动后,把这个进程附加到VS中去,1分钟过后,你就会看到,它命中了断点。不过有一个前提就是,你必须在1分钟内把这个进程附加到VS中去,否则的话,它还是命中不了。
如果还有问题的话,就检查一下,看你的Windows服务是不是在Release模式下生成的,如果是的话,要把它改成在Debug模式下生成。
详细的说明,可以参考这篇文章Windows服务(附服务开发辅助工具)
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
说课包括哪些方面 说课内容包括()。 如何在手机百度上删除对话记录? 结核病是什么样的疾病? 曹丕17岁得了肺痨,明知自己命不长久,还要强争王位,是不是很自私呢?_百... 古代小说常出现的病名 急求一篇"生活小窍门"(500字)的作文 至今最有什么小妙招 健康的戒烟方法 笔记本电池锁死是什么原因引起的? 如何调用windows Service,提供服务 影视后期制作培训机构 影视后期制作培训班哪里的好呢? 哪里有学视频后期制作的补习班? 影视后期制作培训机构哪里的好呢? 有那个学校的专业中有影视后期制作啊 想给弟弟报个暑期班,跪求江苏省连云港最好的影视后期培训,很急的!谢谢 如何看查找我的iphone有没有关闭?icloud注销了查找我的 iPhone没退出别人看得到资料 推荐下江苏有名的影视后期制作培训基地,实训比较强的(不要广告) 如何查看苹果ios版本是否关闭 iphone 7plus 如何查询id锁关闭或开启 利仁绿洲G1电饼铛与法格多功能料理锅哪个烧烤功能强大? iphone6怎样快速查看关闭进程? 怎么找到关机的iphone? 利仁电饼铛ER-X3008说明书 电饼铛的电饼铛食谱 电饼铛哪种牌子哪个型号的综合性价比比较好?另求电饼铛菜谱 苹果手机如何查到关机时间 电饼铛怎么用?求最简单实用的电饼铛食谱。 怎样使用电饼铛烙饼和饼铛食谱 c# WindowsService程序是干什么用的 车漆水印擦不掉怎么办? 黑色车漆上的水印擦不掉,该如何清除? 车漆表面有很多水渍斑点 怎么也擦洗不掉 刹车油泼在车漆上会腐蚀车漆么?我的车上不知道被泼了什么,像水印一样怎么擦都擦不掉,找大神求解!急 漆面有些水痕,洗车也洗不掉,是什么原因造成的啊,要怎么防治啊? 新车车漆有水印擦不掉 车漆被锈水腐蚀怎么办,怎么去除水印。 平板怎么注册? 平板电脑注册的详细步骤。 车漆污渍去不掉,我该怎么办 车漆表面的水印怎么处理掉啊? 白色车,下雨后,我洗车时发现漆面很多黑色的水渍印怎么都洗不掉,请问下要怎样才能洗掉啊?急急急!!! 平板电脑上怎样注册? 白色车有擦不掉的黑印是什么? 平板电脑注册的详细步骤。 车子洗完没擦干车顶有水印不去清楚对车子车漆有没有什么影响? 平板电脑注册的详细步骤。 汽车车漆被酸碱物质给腐蚀了,有一点一点的痕迹,查不掉了…怎么办? 玻璃水腐蚀车漆怎么办