C# 开发Windows Service(一)——第一个windows服务开发和安装卸载

一.创建windows服务项目

打开vs2012,新建项目选择windows服务


二.写服务程序

项目创建成功之后,打开service.cs类,在这里,我们写入一点简单的代码。

我们在服务启用和停止的时候向D盘的一个文本文件进行写入数据的操作。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks;

namespace WindowsService1
{
    public partial class Service1 : ServiceBase
    {
        public Service1()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            FileStream fs = new FileStream(@"d:\windowsservice.txt", FileMode.OpenOrCreate, FileAccess.Write);
            StreamWriter sw = new StreamWriter(fs);
            sw.BaseStream.Seek(0, SeekOrigin.End);
            sw.WriteLine("Service Start" + DateTime.Now.ToString() + "\n");

            sw.Flush();
            sw.Close();
            fs.Close();
        }

        protected override void OnStop()
        {
            FileStream fs = new FileStream(@"d:\windowsservice.txt", FileMode.OpenOrCreate, FileAccess.Write);
            StreamWriter sw = new StreamWriter(fs);
            sw.BaseStream.Seek(0, SeekOrigin.End);
            sw.WriteLine("Service Stop" + DateTime.Now.ToString() + "\n");
            sw.Flush();
            sw.Close();
            fs.Close();
        }
    }
}

其中,重写的方法OnStart内的程序为服务启动时的执行,OnStop内的程序是服务停止时执行。


回到service1.cs的设计窗口,右键添加安装程序。

将serviceProcessInstaller1的属性Account设置为LocalSystem

Account属性不同值的区别见下表



将serviceInstaller1的ServiceName属性修改为service1,与服务类名相对应

starttype属性的区别



保存生成项目。


三.安装服务

这里先说最简单粗暴的方式。

写两个批处理程序,保存文件时的格式选择utf-8,不知道如何修改的小伙伴们推荐使用editplus。

install.bat:

%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe WindowsService1.exe
Net Start Service1
sc config Service1 start= auto
pause

其中 Net start  service1为启动服务,auto为是否自动运行,这部分代码可以根据需求自行改动。


uninstall.bat:
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /u WindowsService1.exe

之后,win7的用户可以考虑直接运行就ok,win10由于权限问题,直接运行可能会报错

按照网上看到的一些方法,将生成的WindowsService1.exe的属性改为管理员身份运行,然而也未必会有用。


这时候用最粗暴的方式,以管理员身份运行cmd,定位到bat所在位置,直接运行install.bat,应该可以安装成功,卸载同理。


顺利安装成功之后我们去D盘看看我们用windows 服务创建的文件。


没问题,该写的内容已经写入。卸载同理,就不用看了~


当然,我们还想看看这个服务到底还在不在运行。


ok哒~第一个简单的win服务搞定


四.服务循环执行的方法


重温一下timer。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks;
using System.Timers;

namespace WindowsService1
{
    public partial class Service1 : ServiceBase
    {
        public Service1()
        {
            InitializeComponent();
        }
        Timer timer;
        public static int num = 1;
        protected override void OnStart(string[] args)
        {

            timer = new Timer();
            timer.Interval = 3000;
            timer.Elapsed += new ElapsedEventHandler(StartWrite);
            timer.Enabled = true;
        }

        protected override void OnStop()
        {
            this.timer.Enabled = false;
            FileStream fs = new FileStream(@"d:\windowsservice.txt", FileMode.OpenOrCreate, FileAccess.Write);
            StreamWriter sw = new StreamWriter(fs);
            sw.BaseStream.Seek(0, SeekOrigin.End);
            sw.WriteLine("Service Stop" + DateTime.Now.ToString() + "\n");
            sw.Flush();
            sw.Close();
            fs.Close();
        }

        public static void StartWrite(object sender, ElapsedEventArgs e)
        {
            FileStream fs = new FileStream(@"d:\windowsservice.txt", FileMode.OpenOrCreate, FileAccess.Write);
            StreamWriter sw = new StreamWriter(fs);
            sw.BaseStream.Seek(0, SeekOrigin.End);
            sw.WriteLine("第"+num+"次写入:" + DateTime.Now.ToString() + "\n");
            num++;

            sw.Flush();
            sw.Close();
            fs.Close();
        }
    }
}



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值