C#创建Windows服务与安装

原创 2016年08月30日 17:26:53

当我们做项目的时候,经常会遇到一种情况就是:需要隔一段时间就执行某些操作,比如数据库统计,删除多余的文件防止项目占用很多空间等等。

下面通过一个小demo来说明Windows服务与安装。

1–> 创建项目

这里写图片描述

2–> 右键点击Service1.cs,查看代码, 用于编写操作逻辑代码。逻辑代码包括两个部分,OnStart和OnStop。我们主要修改的是OnStart中的内容,即:服务开启之后执行的逻辑

这里写图片描述

3 –> 由于我们需要每隔一段时间就执行一次,一般使用timer,便于隔一段事件执行一回,在代码中添加一个timer,并实现timer的Elapsed事件。主要代码:

private System.Timers.Timer myTimer;//timer
        /// <summary>
        /// 重写服务OnStart方法
        /// </summary>
        /// <param name="args"></param>
        protected override void OnStart(string[] args)
        {
            myTimer = new System.Timers.Timer();
            myTimer.Interval = 60000; //设置计时器事件间隔执行时间
            myTimer.Elapsed += (timer1_Elapsed);
            myTimer.Enabled = true;

        }

        /// <summary>
        /// 重写服务OnStop方法
        /// </summary>
        protected override void OnStop()
        {

        }

        /// <summary>
        /// timer
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void timer1_Elapsed(object sender, ElapsedEventArgs e)
        {
            try
            {
                DoWork();
            }
            catch (Exception ex)
            {

            }
        }

        //逻辑代码
        void DoWork()
        {

        }

至此,逻辑部分代码基本就写完了。

4 –> 创建安装服务。双击解决方案中Service1,打开视图设计器。

这里写图片描述

5 –> 在视图内【右键】——-【添加安装程序】。项目中添加了ProjectInstaller.cs文件,该文件中视图自动会添加俩个组件
serviceProcessInstaller1
serviceInstaller1

这里写图片描述

6 –> 选中serviceProcessInstaller1组件,查看属性,设置account为LocalSystem

这里写图片描述

7 –> 选中serviceInstaller1组件,查看属性
设置ServiceName的值, 该值表示在系统服务中的名称
设置StartType, 如果为Manual则手动启动,默认停止,如果为Automatic为自动启动
设置Description,添加服务描述

这里写图片描述

ServiceName:该值表示在系统服务中的名称 。即红色框中的部分,这个值不能为空,否则在系统服务中找不到(以前做服务一不小心就这样了).

这里写图片描述

设置Description,添加服务描述:

这里写图片描述

让后就可以生成项目,准备安装了。

8 – > 安装服务。

a . 运行cmd,获取命令提示符win7需要已管理员的身份启动,否则无法安装
这里写图片描述

b . 由于demo的框架使用的是4.5的,所以输入 cd C:\Windows\Microsoft.NET\Framework\v4.0.30319 回车
切换当前目录,此处需要注意的是,在C:\Windows\Microsoft.NET\Framework目录下有很多类似版本,具体去哪个目录要看项目的运行环境,例 如果是.net framework2.0则需要输入 cd C:\Windows\Microsoft.NET\Framework\v2.0.50727

这里写图片描述

c . 输入 InstallUtil.exe E:…\TestServert.exe 回车
说明:E:…\TestServer.exe表示项目生成的exe文件位置

这里写图片描述

打开服务,就可以看到已经安装的服务了

9 – >卸载服务

卸载很简单,打开cmd, 直接输入 sc delete TestServer便可.删除服务的时候,E:…\TestServert.exe这个路径必须存在,否则会删除不成功。

10 – > 服务的调试:

这里写图片描述

也就是说VS中不能直接调试windows服务。调试方法:

a. 通过附加到进程调试(在网上查到过,不过没试过)

这里写图片描述

b . 创建另外的项目,单独调试服务中的方法,即demo中 DoWork()方法,测试方法的正确性。

c . 直接安装服务,运行,通过日志来判断服务的运行状况。

比较喜欢的是b c 两种方法联合起来使用。

部分内容从摘抄自:
创建Windows服务与安装

相关文章推荐

C#编写Windows服务并安装与启动

Windows服务可在系统启动时自动打开的程序,非常适合做后台处理程序。 1)、创建Windows服务项目     在新建项目中,选择Windows服务。     实现里面的OnStart与On...

C#创建、安装一个Windows服务

关于WIndows服务的介绍,之前写过一篇:http://blog.csdn.net/yysyangyangyangshan/article/details/7295739。可能这里对如何写一个服务不...

C# windowsService安装

安装windows service通常有两种工具 1.Framework目录下的installutil.exe工具。 2.visual studio命令行工具在这里我要说的是当我们使用的系统是64...
  • zfyong
  • zfyong
  • 2013年03月03日 21:11
  • 2960

C#创建Windows服务程序

一.Windows服务介绍:   Windows服务以前被称作NT服务,是一些运行在Windows NT、Windows 2000和Windows XP等操作系统下用户环境以外的程序。在以前,编写W...

C#创建Windows Service(Windows 服务)基础教程

Windows Service这一块并不复杂,但是注意事项太多了,网上资料也很凌乱,偶尔自己写也会丢三落四的。所以本文也就产生了,本文不会写复杂的东西,完全以基础应用的需求来写,所以不会对Window...
  • fzzsh
  • fzzsh
  • 2016年09月08日 10:39
  • 830

C#制作Windows service服务系列三--制作可控制界面的Windows服务(windows service)

  在前面两篇文章中,我们可以做到自启动windows和定时自动执行windows service  系列一: 制作一个可安装、可启动、可停止、可卸载的windows service(downmoon...

C#开发Windows Service程序

Windows Service概念介绍Windows Service,也称Windows服务,是32位Windows操作系统中一种长期运行的后台程序。它们长期后台运行,没有用户界面,默默无闻,但它们却...

C#获取windows服务的路径和安装卸载服务实例代码

C#获取windows服务的路径和安装卸载服务实例代码,获取路径是通过注册表来查的引用.System.Configuration.Install.dllSystem.ServiceProcess.dl...

使用C#代码安装 Windows 服务(不使用InstallUtil)

using System; using System.Collections.Generic; using System.ServiceProcess; using System.Conf...

Windows手工创建服务方法

需要将程序设置成Windows服务的情况,可以利用一下windows自带的sc命令来创建服务. 该命令的基本用法如下: 打开cmd命令, 输入如下信息: 1 创建服务: sc create Sec...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#创建Windows服务与安装
举报原因:
原因补充:

(最多只允许输入30个字)