Window Services的调试和非托管dll的引用及其他一些注意问题

摘要:
一个asp.Net项目,客户需要添加即时消息提醒功能;由于GPRS模块在项目中用于无线通信,也可用于发送短消息,因此该GPRS模块用于发送短信息提醒;该即时消息提醒功能计划在Windows服务中实现;然后修改表结构并开始对windows服务进行编码。测试期间发现,windows服务的测试并不简单。在谷歌之后,windows服务的调试主要包括以下方法:方法1:编写原始日志来调试windows服务,但调试不方便。

一个asp.net项目,客户提出需求,需要增加即时短信提醒功能;因为项目中使用到GPRS模块做无线通讯,还可以用作发送短信,就用了这个GPRS模块发短信提醒;
这个即时短信提醒功能,计划用window services实现;然后修改表结构,开始window services的代码编写。代码编写完成后,开始调试。测试时才发现,window services测试还不简单,google了下,window services的调试主要有以下几个方法:
方法1:写日志
 原始的调试windows service的方法,但是调试起来不方便。

方法2:附加进程
        附加进程的方法可以像调试正常的widows程序一样,设置断点进行单步调试。但是必须在安装启动服务后,才可以进行附加此服务进程,可在附加的同时OnStart 函数已经执行完毕,所以对Onstart 无法调试(正常服务的启动时间为30秒左右,当服务启动时间超过30秒会报错)。需要通过设置启动服务延时来加载调试。设置有些繁琐;


方法3:修改Main函数,在用户交互模式下调试。调试时更改Project的输出类型为Console Application,就可以直接调试了。

     if (Environment.UserInteractive)
            {
                Service1 s = new Service1();
                string[] args = { "a", "b" };
                s.start(args);
                Console.WriteLine("the service is started");
                Console.ReadLine();
                s.stop();
                Console.WriteLine("the service is stopped");
            }
            else
            {
                ServiceBase[] ServicesToRun;
                ServicesToRun = new ServiceBase[]
         {
          new Service1()
         };
                ServiceBase.Run(ServicesToRun);
            }


在应用非托管dll时,有时会提示找不到dll文件,可以依次尝试一下过程看会否有帮助:
1.复制dll文件到项目bin文件下;
2.复制dll文件到system32路径下;
3.在[DllImport]是加上dll文件路径;

另外,在开发window services程序时,使用的Timer控件需注意。如果使用System.Windows.Form.Timer控件,可能会不能正常运行,应使用System.Timers.Timer控件;
安装服务后,在删除服务时,可以直接使用SC.exe命令删除服务项

免责声明:文章转载自《Window Services的调试和非托管dll的引用及其他一些注意问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Hive函数:SUM,AVG,MIN,MAXArcMap 5 同一地区,多图层不能一起显示下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ISR吞吐性能问题

ISR大致可以分几类: Cisco 860、880、890 ISR1800 (fixed)、1800 (modular)、2800、3800 Series ISR1900、2900、3800、3900 Series ISR4K 每一代的设备,设备的性能肯定都不一样,本摘要,将主要记录ISR的吞吐性能问题。 1、下图主要体现的是800 Series和19...

vs中debug和release的区别你知道吗

在Visual Studio中,生成应用程序的时候有2种模式:Debug和Release。两者之间如何取舍呢? 一、vs中debug和release的区别 1、Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。 2、Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好...

使用Qt Creator进行linux远程调试

序言 考虑到程序员在无桌面Linux的环境下编写C/C++程序,如果使用原生的Vim编辑和单步断点调试比较麻烦,不利于新手使用,所以笔者尝试使用Qt实现两台Linux电脑远程部署和调试。即程序员在调试电脑使用Qt编写代码,然后把目标程序部署在正式电脑上。本篇目的是帮助大家摆脱vim,一劳永逸,解决痛点。请读者不要误以为Qt Creator只能用来做桌面软件...

ubuntu12.04下Qt调试器的使用

  最近,我一直在用Qt编写C++程序,但在编写过程中遇到了问题,想用Qt Creator中的调试器调试一下,但调试时(在Qt Creator中已配置好相应的调试器)出现“ ptrace:Operation not permitted ”的错误,如下图所示: 经百度搜索,找到了问题的原因及其解决方案。   原来,在Ubuntu 11.04("Natty...

基于 Blazui 的 Blazor 后台管理模板 Blazui.Admin 正式尝鲜

简介   Blazui.Admin 是一个基于Blazui的后台管理模板,无JS,无TS,非 Silverlight,非 WebForm,一个标签即可使用。   我将在下一篇文章讨论 Blazor 服务器端渲染与客户端渲染的基本原理,对比服务器端渲染与 WebForm 的异同点   经过近一个月的开发,Blazui.Admin 尝鲜版终于搞定了,功能很有限...

一起谈.NET技术,给大家分享两款正在使用的reflector插件 狼人:

  推荐两款神器:Deblector和reflexil   Deblector   它的名字是Debug 和 reflector 两个单词的结合。就是用来调试的。 简单的说,它可以像ide一样启动调试进程,或者Attach到一个运行中的进程,并调试他们,设置断点,单步运行,查看变量等等。 它不需要pdb文件,也不会像reflector pro的调试插件一样...