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

 

一个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命令删除服务项

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值