Windows Service开发日志一(Win服务的一些技巧与出错处理)
2008-12-24 14:12
141 查看
最近要帮公司系统增加一个类似于QQ机器人的功能,通过聊天人员发送相关指令(特殊字符),自动到数据库中取相关信息返回聊天人员,由于功能单一而且要长期执行,所以我想起用Windows服务的方式处理,同时也可以学习一下相关知识.在开发中遇到的问题和处理方法,我都记录在其中,希望能帮助有相同困难要处理的朋友.
一.Windows服务中的时钟问题.
要在服务中实现定时询问,一般有两种做法,其一是用时钟定时执行,其二是用线程,如果用时钟来处理的话就要注意了,从工具箱中取出的控件默认都是继承于类System.Windows.Forms.Timer,但这种控件在服务中是不会被执行的,如果要在服务中用,一定要用继承于类System.Timers.Timer的控件才行,
如果你想保持用可视化的方式来开发,你可以打开服务对应的设计文件(举例,服务文件名叫AlarmService,那么就打开AlarmService.Desinger.cs),将里面的System.Windows.Forms.Timer改为System.Timers.Timer(注意,有两个地方要改),保存后,你双击服务中的Timer控件就会发现创建的事件已经不同了,但其它地方大致还是一样的.
你也可以用代码同态创建,然后定义一个方法,再将方法绑到对象的Elapsed事件中,代码如下
Timer Timer1=new Timer()
protected override void OnStart(string[] args)
{
Timer1.Elapsed +=this.timer1_Elapsed; //动态绑定事件
}
private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
//中间省略
}
即可
二.创建好服务好启动服务时出错,提示#1083
由于我同一个项目中创建了两个服务,但C#很笨,我装服务改名时,他不会为新的服务重新创建一个新的对象,举例:我创建一个Windows服务项目时,系统会自动创建一个叫Service1的服务,如果我装其它文件重命名为AlarmService后,打开Program.cs发现里面创建的服务对象还是Service1,要手工进行修改,不然注册服务后运行就会报1083,还有一点,同一项目如果创建了两个或以上服务时,新创建的服务系统也不会为其创建对象,也是要手工在Program.cs文件中添加,否则启动服务时也会报1083错
语法如下:
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new AMIService(),new AlarmService() //假设两个服务的名分别为AMIService和AlarmService
};
ServiceBase.Run(ServicesToRun);
一.Windows服务中的时钟问题.
要在服务中实现定时询问,一般有两种做法,其一是用时钟定时执行,其二是用线程,如果用时钟来处理的话就要注意了,从工具箱中取出的控件默认都是继承于类System.Windows.Forms.Timer,但这种控件在服务中是不会被执行的,如果要在服务中用,一定要用继承于类System.Timers.Timer的控件才行,
如果你想保持用可视化的方式来开发,你可以打开服务对应的设计文件(举例,服务文件名叫AlarmService,那么就打开AlarmService.Desinger.cs),将里面的System.Windows.Forms.Timer改为System.Timers.Timer(注意,有两个地方要改),保存后,你双击服务中的Timer控件就会发现创建的事件已经不同了,但其它地方大致还是一样的.
你也可以用代码同态创建,然后定义一个方法,再将方法绑到对象的Elapsed事件中,代码如下
Timer Timer1=new Timer()
protected override void OnStart(string[] args)
{
Timer1.Elapsed +=this.timer1_Elapsed; //动态绑定事件
}
private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
//中间省略
}
即可
二.创建好服务好启动服务时出错,提示#1083
由于我同一个项目中创建了两个服务,但C#很笨,我装服务改名时,他不会为新的服务重新创建一个新的对象,举例:我创建一个Windows服务项目时,系统会自动创建一个叫Service1的服务,如果我装其它文件重命名为AlarmService后,打开Program.cs发现里面创建的服务对象还是Service1,要手工进行修改,不然注册服务后运行就会报1083,还有一点,同一项目如果创建了两个或以上服务时,新创建的服务系统也不会为其创建对象,也是要手工在Program.cs文件中添加,否则启动服务时也会报1083错
语法如下:
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new AMIService(),new AlarmService() //假设两个服务的名分别为AMIService和AlarmService
};
ServiceBase.Run(ServicesToRun);
相关文章推荐
- BS开发技巧之二公式与JavaScript相结合处理BS出错
- 百亿级日志处理稳定性保证的一些技巧
- BS开发技巧之二:公式与JavaScript相结合处理BS出错
- 日志处理中一些shell命令技巧
- 一些在线工具集(图形处理、开发工具集、cdn服务)
- 日志处理中一些shell命令技巧
- BS开发技巧之二:公式与JavaScript相结合处理BS出错
- 用C语言开发一个BT下载软件 (四) ------ 代码实现-3-出错处理模块和运行日志模块
- 本地计算机上的ArcGis server object Manager 服务启动后又停止了。一些服务自动停止,如果它们没有什么可做的,例如“性能日志和警报”服务
- iPhone开发技巧之数据篇(2)— iPhone程序中的加密处理
- 新年之际,盘点一些APP开发技巧
- Web项目开发中对脚本和样式需求处理的一些想法
- Windows Phone 实用开发技巧(22):使用日志记录当前信息与异常信息
- web开发中的多条件查询处理技巧1则
- 用ASP.NET开发Web服务的五则技巧
- 批处理文件安装卸载window服务程序的技巧
- HTML取消点击事件等一些开发技巧
- Linux平台下基于BitTorrent应用层协议的下载软件开发--出错处理模块(bterror.c)
- 水银体温计摔坏了怎样处理---与开发无关的生活技巧
- 服务启动后又停止了。一些服务自动停止,如果它们没有什么可做的,例如“性能日志和警报服务”