您的位置:首页 > 编程语言 > C#

C#编写winservice的遇到的问题总结

2010-10-22 10:58 246 查看
项目中遇到了一个要写winservice做为一个监视程序在服务器端监视服务的运行状况,并生成相关的文档发送到指定的邮箱里面,如果说是做为一般的应用程序来写的话这个问题很简单,但是在服务程序里面问题就来了.
首先是生成文档的问题,当然这一个问题在我的另一日志里面已经有一说明,
另外一个就是启动onStart的时候,安装好了服务程序过后,第一次启动会报一个1053的错误代号,找了很久也没有找到问题出版,甚至是把里面的相关代码全部删除这个问题依然存在,
然而,另外新建一个服务的话,什么也不写,就不会出这个问题了;现在一步一步的找问题所在.
首先,在运用中,很多地方会用到全局变量,所以一开始就定义好一个变量
private System.Timers.Timer timerTask = new System.Timers.Timer();
这个变量用来做监视用,就是每一段时间写一次数据,然后写一个Elapsed事件,这样就可以运行查看效果了
timerTask.Elapsed += new System.Timers.ElapsedEventHandler(timerTask_Elapsed);
这时候问题就来了,在服务里面启动这个服务,每次启动都在启动两次才能启动成功,很郁闷!开始我以为是Elapsed里面的问题,把事件里面的代码全部注释掉,问题还是存在,那么肯定不是这里的问题了,
然后把onStart里面的代码也注释掉,依然如故
最后所有的相关方法代码都注释掉了,还是这个问题,最后再看全局变量的问题了,把这个变量注释掉过后,问题解决了!但是,如果这个变量不存在的话怎么来监视呢,有个解决方案,就是在onstart事件里面定义这个变量,这就运行就没问题了!
但是这样他就成了一个局部变量了,有些时候我们必须要用到全局变量的时候那怎么办呢.经过多次修改最后发现这样的一个问题------那就是在定义全局变量的时候,不能给这个变量进行初始化操作
后来,全局变量定义在好,但没有初始化,如下
private System.Timers.Timer timerTask = null;
这样程序就不会启动两次才能启动成功了,这时我们只需要在onstart事件里面对这个变量进行初始化即可!

timerTask = new System.Timers.Timer();
这样就可以在其他地方对这个变量进行操作了!
以上就是对这次问题的总结!没有什么高深的,只是为了记录编写过程中遇到的一些问题以及解决方案,以备不时之需!
本文出自 “Laputaliya” 博客,请务必保留此出处http://laputaliya.blog.51cto.com/751941/409048
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: