.net Windows服务程序

.net Windows服务程序

      最近项目中用到window服务程序,以前没接触过,比较陌生,花了两天的时间学习了下,写了个简单的服务,但在制作安装程序的时候,参照网上很多资料,却都制作不成功,可能是开发环境或项目配置的不同,这里把自己成功制作的方式贴出来,一方面留给自己,一方面也希望能给遇到同样问题绝望中不能自拔、以致失去灵魂的路人甲,路人乙一还魂丹 . . .

      IDE :WIN2003  VS2008  SQL2005

      一、创建window服务项目

      首先我们建一个window服务项目 :解决方案(右击)——> 增加 ——> 新建项目——>项目类型选择Windows——>模板选择Windows服务 ,如图:

 

      二、编写Window服务程序

      创建后会生成两个文件 Program.cs 和 Service1.cs ,其中 program.cs 这个文件不用动,里面已自动生成好了。我们在Service1.cs里增加所要的操作,里面有两个重写方法 OnStart 和 OnStop ,OnStart 方法表示服务启动的操作,OnStop 表示服务停止的操作,下面写了一个简单示例 :当服务启动后,调用远程一个WebService的Hello函数,并把返回的值写入到一个文件中。code如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading;
using ClassLibrary1;
using System.IO;
namespace WindowsService
{
    public partial class SearchService : ServiceBase
    {
        Timer serviceTimer; //定义计时器
        ServiceBusiness serviceBusiness;
        private Thread threadTest;
        int period;
        object state;
        public SearchService()
        {
            InitializeComponent();
            serviceBusiness = new ServiceBusiness();
        }
        
        protected override void OnStart(string[] args)
        {
            //threadTest = new Thread(new ThreadStart(Dothings));
            //threadTest.Start();
            //Thread.Sleep(5000);
            period = 5000;
            serviceTimer = new Timer(new TimerCallback(TimeCallback), state, 0, period);
        }

        protected override void OnStop()
        {
          //  threadTest.Abort();
            serviceTimer.Change(Timeout.Infinite, Timeout.Infinite);
        }
        protected override void OnContinue()
        {
            //重新开始计时
            serviceTimer.Change(0, period);
        }
        protected override void OnPause()
        {
            //停止计时器
            serviceTimer.Change(Timeout.Infinite, Timeout.Infinite);
        }
        public void TimeCallback(object obj)
        {
            //隔一段时间调用一次
            serviceBusiness.Dothings();
        }
        public void Dothings()
        {
            string fileName = @"E:\Info.txt";
            //隔一段时间调用一次
            StreamWriter sw;

            if (!File.Exists(fileName))
            {
                sw = File.CreateText(fileName);
            }
            else
            {
                sw = File.AppendText(fileName);
            }
            sw.WriteLine("执行1次\n" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
            sw.Flush();
            sw.Close();
        }
    }
}

 

      例子很简单,方便理解,上面通过线程,每5秒执行一次操作,到这里,我们的服务以及服务实现的功能就已经写好了,下面怎么让客户端安装我们的服务呢?这里才是我写这篇文章的目的!切换到视图窗口,右击——>增加安装程序,便会增加一个程序安装类文件 ProjectInstaller.cs,如图:

这里serviceProcessInstaller1 和 serviceInstaller1 有几个重要属性要设置,serviceInstaller1 中的StartType要设置成Automatic,表示随机启动,ServiceName表示服务名称,Description 表示服务的描述, DisplayName 表示显示名称。serviceProcessInstaller1 中的Account要设置成LocalSystem,表示本地系统帐号

 

 

      

转载于:https://www.cnblogs.com/uianqian/archive/2013/04/18/3028621.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值