0
点赞
收藏
分享

微信扫一扫

使用.net开发并生成Windows服务安装包


公司项目中的一个数据库搜索的表因为有新的产品的添加,这个表就需要添加新的记录,把产品的描述、类别以及其它的一些相关信息添加进来,这个搜索的表的数据又不能时常人工去更新,因为两三个就会有新的产品的推出。所以分两部分实现,一部分用Wcf服务来实现搜索的表的数据更新操作,另一部分用windows服务来定时调用Wcf服务.当我们手动更新时也可以通过程序后台调用wcf服务来完成.本篇只讲windows服务的创建以及生成包装windows服务的安装包的一些操作.

 

新建一个windows服务项目

​​使用.net开发并生成Windows服务安装包_service​​

点击确定以后

​​使用.net开发并生成Windows服务安装包_.net_02​​

生成了一个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" />



 



注意:我们新建的windows服务项目默认是 ​​使用.net开发并生成Windows服务安装包_windows_03​​ ,我们需要改变目标框架



​​使用.net开发并生成Windows服务安装包_.net_04​​



我改成了.NET Framework 4.



 



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文件,此时显示设计视图,然后右击鼠标出现如下图所示界面

​​使用.net开发并生成Windows服务安装包_service_05​​

选择添加安装程序.此时生成一个文件ProjectInstaller.cs,双击该文件进入了设计界面,

​​使用.net开发并生成Windows服务安装包_timer_06​​

​​使用.net开发并生成Windows服务安装包_wcf_07​​

右键serviceInstaller1出现如上弹出菜单选择属性.打开属性对话框可以看到ServiceName属性,这个就是我们生成的windows服务的名称.StartType指定服务启动类型如自动、手动、禁用.

接下来我们查看并设置serviceProcessInstaller1的属性,Account属性指定用户类型,这里用的是NetworkService用户,具体用什么用户可以去msdn了解详细.

现在我们新建一个安装程序项目

​​使用.net开发并生成Windows服务安装包_service_08​​

​​使用.net开发并生成Windows服务安装包_.net_09​​

右键Setup=>添加=》项目输出,出现如下界面

​​使用.net开发并生成Windows服务安装包_service_10​​

点击确定.然后 Setup右键=>视图=>自定义操作,如下图

​​使用.net开发并生成Windows服务安装包_service_11​​

出现如下

​​使用.net开发并生成Windows服务安装包_wcf_12​​

自定义操作右键=》添加自定义操作

​​使用.net开发并生成Windows服务安装包_.net_13​​

​​使用.net开发并生成Windows服务安装包_service_14​​

点击确定,然后选择Valorservice

​​使用.net开发并生成Windows服务安装包_timer_15​​

点击确定就Ok了.生成Setup这个项目就可生成windows服务的安装包了.

​​使用.net开发并生成Windows服务安装包_wcf_16​​



举报

相关推荐

0 条评论