公司项目中的一个数据库搜索的表因为有新的产品的添加,这个表就需要添加新的记录,把产品的描述、类别以及其它的一些相关信息添加进来,这个搜索的表的数据又不能时常人工去更新,因为两三个就会有新的产品的推出。所以分两部分实现,一部分用Wcf服务来实现搜索的表的数据更新操作,另一部分用windows服务来定时调用Wcf服务.当我们手动更新时也可以通过程序后台调用wcf服务来完成.本篇只讲windows服务的创建以及生成包装windows服务的安装包的一些操作.
新建一个windows服务项目
点击确定以后
生成了一个Service1.cs的服务类,我把它重命名为ValorService.cs.双击ValorService.cs查看其源码。这是我的ValorService.cs类的源码
public partial class ValorService : ServiceBase
{
public ValorService()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
System.Timers.Timer timer = new System.Timers.Timer(Convert.ToInt32(ConfigurationManager.AppSettings["Interval"]));
timer.AutoReset = true;
timer.Elapsed += new System.Timers.ElapsedEventHandler(OnTimeEvent);
timer.Enabled = true;
}
private void OnTimeEvent(object source,System.Timers.ElapsedEventArgs e)
{
if (DateTime.Now.Hour == Convert.ToInt32(ConfigurationManager.AppSettings["ElapsedHour"]))
{
UpdateKeywordsSerachDataServiceClient service = new UpdateKeywordsSerachDataServiceClient();
service.SyncKeywordsData();
}
}
protected override void OnStop()
{
}
}
System.Timers.Timer timer = new System.Timers.Timer(Convert.ToInt32(ConfigurationManager.AppSettings["Interval"]));
上面这行代码创建定时器类Timer对象并且指定Elapsed(即定时调用的方法的事件)事件定时触发的间隔时间(单位为毫秒),ConfigurationManager.AppSettings["Interval"])这里读取配置文件,如下:
<add key="Interval" value="60000" />
Timer 的AutoReset设置为false时则 Timer 在第一次达到间隔时仅引发一次 Elapsed 事件。然后,Enabled 设置为 false。
timer.Enabled设置为true时开始启用计时。
timer.Elapsed += new System.Timers.ElapsedEventHandler(OnTimeEvent);
指定定时器到时候触发执行的事件方法.我这里的OnTimeEvent方法调用WCF服务。OnTimeEvent方法有这样一行代码”
if (DateTime.Now.Hour == Convert.ToInt32(ConfigurationManager.AppSettings["ElapsedHour"]))
<add key="ElapsedHour" value="10" />
我需要的实现的是每天10点才会执行调用WCF服务.
到这里windows服务部分都已经成完成。
接下来就是打包windows服务.
双击打开ValorServce.cs文件,此时显示设计视图,然后右击鼠标出现如下图所示界面
选择添加安装程序.此时生成一个文件ProjectInstaller.cs,双击该文件进入了设计界面,
右键serviceInstaller1出现如上弹出菜单选择属性.打开属性对话框可以看到ServiceName属性,这个就是我们生成的windows服务的名称.StartType指定服务启动类型如自动、手动、禁用.
接下来我们查看并设置serviceProcessInstaller1的属性,Account属性指定用户类型,这里用的是NetworkService用户,具体用什么用户可以去msdn了解详细.
现在我们新建一个安装程序项目
右键Setup=>添加=》项目输出,出现如下界面
点击确定.然后 Setup右键=>视图=>自定义操作,如下图
出现如下
自定义操作右键=》添加自定义操作
点击确定,然后选择Valorservice
点击确定就Ok了.生成Setup这个项目就可生成windows服务的安装包了.
或者用:
用InstallUtil安装Windows服务
现在这个服务已经生成,你需要把它安装好才能使用。下面操作会指导你安装你的新服务。
1. 打开Visual Studio .NET命令提示
2. 改变路径到你项目所在的bin\Debug文件夹位置(如果你以Release模式编译则在bin\Release文件夹)
3. 执行命令“InstallUtil.exe MyWindowsService.exe”注册这个服务,使它建立一个合适的注册项。
4. 右击桌面上“我的电脑”,选择“管理”就可以打计算机管理控制台
5. 在“服务和应用程序”里面的“服务”部分里,你可以发现你的Windows服务已经包含在服务列表当中了
6. 右击你的服务选择启动就可以启动你的服务了
- InstallUtil WindowsServiceTest.exe 安装
- InstallUtil -u WindowsServiceTest.exe 卸载
在每次需要修改Windows服务时,这就会要求你卸载和重新安装这个服务。不过要注意在卸载这个服务前,最好确保服务管理控制台已经关闭,这会是一个很好的习惯。如果没有这样操作的话,你可能在卸载和重安装Windows服务时会遇到麻烦。仅卸载服务的话,可以执行相的InstallUtil命令用于注销服务,不过要在后面加一个/u命令开关。
转载自:http://www.cnblogs.com/yangbingqi/archive/2011/08/09/2132166.html
http://blog.csdn.net/dragonpeng2008/article/details/6653004