如何用OD调试windows服务程序

如何用OD调试windows服务程序,第1张

第一方法:

这种方法其实说起来不叫调试,也是一种笨办法,就是用MessageBox把一些程序的中间信息输出来,方便你找出程序是在哪个地方出问题了,你也可以在try catch中使用,用MessageBox把异常d出来,这种方法也比较直观。可惜,实现起来也有问题。我们首先要添加using System.Windows.Forms的引用,然后加上一行代码MessageBox.Show(ex.ToString(), "Error")本以为这样说行了,可是把服务重新编译生成,并安装启动后,它并没有d出框来。百思不得其解。幸好,在服务的程序里面,启用了系统的日志,它会把相关的异常记录到系统日志中去,在“计算机管理”的“事件查看器”里面可以找到。果然发现了一个,

显示的信息是

“当应用程序不是以 UserInteractive 模式运行时显示模式对话框或窗体是无效 *** 作。请指定 ServiceNotification 或 DefaultDesktopOnly 样式,以显示服务应用程序发出的通知。”

直接百度,找到了一个答案,原来是调用MessageBox时,还需要设置它的MessageBoxOptions属性为DefaultDesktopOnly。修改如下:

MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly)

然后再次重新编译,安装并启动,OK,顺利的d出了错误的信息。

第二种方法:

第二种方法就是真正的调试,其实Windows服务还是可以调试的,应该说任何一种类型的程序都应该能调试,别人在开发编译器的时候就人考虑到的。下面来看具体的方法。

我们知道,任何一个程序都有一个对应的进程,如果你的Windows服务启动后,也会有一个对应的进程。通过任务管理器,就能看到。

我们可以通过VS编译器里面,提供的“附加到进程”这个功能来进行调试。首先你打开你的Windows服务源程序,在里面设置一个断点,例如在OnStart方法中protected override void OnStart(string[] args){}中,然后把你的服务启动,启动过后,在VS的“调试”一栏中找到“附加到进程”

在进程列表里面找到你的进程,

如果没有的话,就把左下角的“显示所有用户的进程”前面的勾选中,然后你就可以找到你的Windows服务的进程了,然后点击确定即可。

点击确定后,可能你等了半天,也没看见它命中断点。哈哈,不要急,前面说漏了一点,我们是先启动的服务,然后再附加的进程,因为服务一启动,就会执行OnStart方法,这时,我们还没有把这个服务的进程附加到VS中去呢?所以在OnStart方法中设置的这个断点肯定不会命中。所以我们需要想个办法,也就是加一个定时器,我们在OnStart方法中启动这个定时器,然后设置这个定时器的时间间隔为1分钟,然后在这个定时器的事件中去设置一个断点。这样把服务重新生成,安装并启动后,把这个进程附加到VS中去,1分钟过后,你就会看到,它命中了断点。不过有一个前提就是,你必须在1分钟内把这个进程附加到VS中去,否则的话,它还是命中不了。

如果还有问题的话,就检查一下,看你的Windows服务是不是在Release模式下生成的,如果是的话,要把它改成在Debug模式下生成。

朋友,电脑出现:内存不能为written,原因总结起来,有以下方面,偶尔出现,点:取消,即可!

(答案原创,本答案原作者:力王历史)

1.电脑中了木马或者有病毒在干扰!

试试:杀毒软件,360安全卫士+360杀毒双引擎版,或者金山卫士+金山毒霸,

建议:修复“高危”和“重要”漏洞!使用“木马云查杀”和“360杀毒”,

“全盘扫描”和“自定义扫描”病毒和木马,删除后,重启电脑!

开机后,点开“隔离|恢复”,找到木马和病毒,彻底删除!

2.如果第1种方法不行,打开:“360安全卫士”,“木马查杀”里的:“360系统急救箱”!

先点:“开始急救”,查杀完毕,删除“可疑自启动项”和木马,再重启电脑!

然后点开“文件恢复”,找到“可疑自启动项”和木马,全选,再点“彻底删除文件”!

再点开“系统修复”,“全选”,再点“立即修复”!网络修复,开始修复,重启电脑!

3.用“360安全卫士”,“系统修复”,一键修复!再:“清理插件”,立即扫描,立即清理:恶评插件!

4.你下载的“播放器”,或“聊天软件”,或“IE浏览器”,或者“驱动”,或

“游戏”的程序不稳定,或者“版本太旧”!建议卸掉,下载新的,或将其升级

为“最新版本”!

5.软件冲突,你安装了两款或两款以上的同类软件(如:两款播放器,两款

qq,或多款浏览器,多款杀毒软件,多款网游等等)!它们在一起不“兼容”,

卸掉“多余”的那一款!

6.卸载方法:你在电脑左下角“开始”菜单里找到“强力卸载电脑上的软件”,找到多余的那款卸掉! 卸完了再“强力清扫”!

或者“360安全卫士”,“软件管家”,点开,第4项:“软件卸载”,点开,找

到“多余”和“类似”的软件卸载!如:“播放器”,点开,留下“暴风”,卸载“快播”!如:“下载”:点开,留下“迅雷”,卸载“快车”!(看准了再卸,别把有用的卸了)

7.再不行,重启电脑,开机后按“F8”,回车,回车,进到“安全模式”里,“高级启动选项”,找到:“最后一次正确配置”,按下去试试,看看效果如何!

8.再不行,开始菜单,运行 ,输入cmd, 回车,在命令提示符下输入(复制即可) :

for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %1

粘贴,回车,直到屏幕滚动停止为止,重启电脑!

9.实在不行就“一键还原”系统或“重装系统”!

打开你电脑的开始校菜单

进入控制面板果

如果没有找威到“控制面板”尚

那么打开运专行,在里面输入control,然后点属击确定

a debugger has been found running in your

a debugger has been found running in your

点击“添+或删除程序”

a debugger has been found running in your

找到杀毒软件与管家类软件和网银控件

点击更改/删除。

a debugger has been found running in your

重新插入你网银使用的U盾。

是不是能正常使用了?

最后为了您电脑的安全,重新安装上其它或者试着安装单独的一个杀软,以免再次冲突导致与网银的冲突。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11685859.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存