最近需要用到windows service,因为客户有一个电子显示屏需要动态显示一些信息。
在服务器上安装一个windos service,定时读取数据库的内容,生成相应格式的xml文件,在指定的目录中。
因为自己一直在做web方面的东西,所以稍微研究了下这个需要怎么做,百度上也有很多资料可查,最后弄好了。
下面把实现的过程备份下,留待参考。
首先用vs2010新建一个windows service的项目,项目名字嘛自己取一个就好。
项目建好后,会有一个Service1.cs的文件,作为服务是不需要界面的,所以点击单击此处切换到代码视图
切换到代码部分。
protected override void OnStart(string[] args)
这个服务启动会执行的方法。
protected override void OnStop()
是服务停止时会执行的方法。
根据自己的需要在里面添加需要的代码就行。
在OnStart里面添加
System.Timers.Timer t = new System.Timers.Timer(1000 * 60 * 5); //这里的间隔是5分钟执行一个
t.Elapsed += new System.Timers.ElapsedEventHandler(DoCheck); //到达时间的时候执行事件;
t.AutoReset = true; //设置是执行一次(false)还是一直执行(true);
t.Enabled = true; //是否执行System.Timers.Timer.Elapsed事件;
//这个方法里是具体实现的代码
public void DoCheckt(object source, System.Timers.ElapsedEventArgs e)
{
//your code
}
这样一个windows service已经完成了。下面需要设置后在服务器上安装。
在Service1.cs界面,右键添加安装程序
这是会添加一个ProjectInstaller,cs文件,点开
serciceInstaller1 右键属性。
Description 是你的服务描述
DisplayName 是服务显示名称
ServiceName 是服务名,修改为你需要的名字,生成相应名字的exe文件
StartType 修改为 Automatic ,自动启动
这4个属性是你需要设置的。
serciceProcessInstaller1右键属性
Account 设置为 LocalSystem
可以生成了吗?还没有,需要检查下服务器的系统版本。
如果服务器的windows系统版本室32位的,右键项目名-》属性,在生成这里 目标为x86
如果服务器windows系统版本室64位的,需要改为 AnyCpu
因为我开发所用电脑为64位系统,这里需要根据需求自行设置好。
下面就是生成了,生成后在bin目录下的Debug目录下可以找到刚才生成的文件,把相应的文件拷贝至服务器上。单独目录存放。
下面需要在服务商安装注册这个服务。
如果服务器室win7之类的版本,需要在 c:\windows\System32目录下选择 管理员方式运行 cmd.exe
然后进入目录 c:\windows\Microsoft.Net\Framework\v4.0.30319
根据服务版本的不同,可能需要进入的framework64这个目录
然后执行 installutil 你刚拷贝的exe文件的具体目录
比如 installutil d:\MyService\MyService.exe 回车
这样服务就注册好了。
需要卸载服务的命令为 installutil /u d:\MyService\MyService.exe
中间多了一个/u。
服务安装好了,但是还没有启动,下面通过 管理->服务,找到你刚才注册的服务,把它启动起来。下面就可以按效果了。
如果需要调试的话,最好服务先安装在本机,注册,启动后,在vs里面选择调试->附加到进程,在你的代码里面打上断点 就可以了。