c#创建、安装、卸载、调试windows服务的简单事例

本篇文章只是简单陈诉用c#创建、安装、卸载、调试windows服务的步骤。

一、创建windows服务

1、用VS创建windows服务,结果如下:

2、删除默认生成的Service1.cs文件,然后创建自己的服务文件(如:MyService),并修改Program.cs文件的代码,如下:

此时,解决方案的目录结构如下:

3、双击MyService.cs服务文件,在左侧设计模式中,右键,点击“添加安装程序”,自动会生成Projectinstaller.cs文件以及两个安装组件,如下:

4、右键”ServiceProcessInstaller1“,选择属性,设置Account 帐号方式,建议为LocalService,如下:

5、右键”ServiceInstaller1“,选择属性,设置属性

  a)Description 服务描述,直接显示到Windows服务列表中的描述;

  b)DisplayName 服务显示名称,直接显示到Windows服务列表中的名称;

  c)ServiceName 服务进程名称,安装与卸载服务时的唯一标识.

如下:

6、创建安装服务批处理文件Install.bat,可以创建记事本,然后修改后缀为bat,记事本内容如下:

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

记事本另存为时设置编码为ANSI,如下图:

7、同理创建创建卸载服务批处理文件Uninstall.bat,内容如下:

%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /u WindowsServiceDemo.exe
pause

此时解决方案的目录结构如下:

二、写服务代码

右键”MyService.cs“,选择查看代码,如下:

namespace WindowsServiceDemo
{
    partial class MyService : ServiceBase
    {
        public MyService()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            // TODO: 在此处添加代码以启动服务。
        }

        protected override void OnStop()
        {
            // TODO: 在此处添加代码以执行停止服务所需的关闭操作。
        }
    }
}

下面实现自己的简单功能,代码如下:

using System;
using System.Diagnostics;
using System.IO;
using System.ServiceProcess;
using System.Timers;

namespace WindowsServiceDemo
{
    partial class MyService : ServiceBase
    {
        private Timer time = new Timer();
        public MyService()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            WriteLog("服务启动,时间:"+DateTime.Now.ToString("HH:mm:ss") + "\r\n");

            time.Elapsed += new System.Timers.ElapsedEventHandler(MethodEvent);
            time.Interval = 2 * 1000;//时间间隔为2秒钟
            time.Start();
        }

        protected override void OnStop()
        {
            WriteLog("服务停止,时间:" + DateTime.Now.ToString("HH:mm:ss") + "\r\n");
        }

        private void MethodEvent(object source, System.Timers.ElapsedEventArgs e)
        {
            time.Enabled = false;

            string result = string.Empty;
            string startTime = DateTime.Now.ToString("HH:mm:ss");
            try
            {
                //.........

                result = "执行成功,时间为:"+ startTime;
            }
            catch (Exception exp)
            {
                result = "失败,原因:" + exp.Message;
            }
            finally
            {
                WriteLog(result);

                time.Enabled = true;
            }
        }

        /// <summary>
        /// 日志记录
        /// </summary>
        /// <param name="logInfo"></param>
        public void WriteLog(string logInfo)
        {
            try
            {
                string logDirectory = AppDomain.CurrentDomain.BaseDirectory + "\\Logs";
                if (!Directory.Exists(logDirectory))
                {
                    Directory.CreateDirectory(logDirectory);
                }
                string filePath = logDirectory + "\\" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt";
                File.AppendAllText(filePath, logInfo);
            }
            catch
            {
            }
        }
    }
}

具体功能是2秒钟执行一次,并记录日志。

三、安装windows服务

重新生成整个解决方案,成功后,从项目所在文件夹赋值bin文件到某个自定义的文件夹,并将Install.bat和Uninstall.bat复制到bin下的Debug文件夹中。

以管理员身份运行Install.bat安装服务,成功结果如下图:

这是右键“我的电脑”,选择“管理”,选择“服务”,就可以看到服务已安装,如下图:

同时,Debug文件夹里有了Logs文件,Logs文件夹里有txt文档,内容如下:

可以看到没2秒钟执行一次。

四、卸载windows服务

卸载服务,同样以管理员身份运行Uninstall.bat即可。

五、调试windows服务

打断点,在工具栏选“调试”下的“附加到进程”,附加自己的服务即可调试。

时间: 2024-10-23 13:56:08

c#创建、安装、卸载、调试windows服务的简单事例的相关文章

C# VS 2010创建、安装、调试 windows服务(windows service)

在一个应用程序中创建多个 windows 服务的方法和 1083 的解决办法 错误解决方案 -------------------------------------------------------------------------------------- 1.创建 windows服务 项目   文件 -> 新建项目 -> 已安装的模板 -> Visual C# -> windows ,在右侧窗口选择"windows 服务" 2.系统已经为我们建立了一个

调试windows服务最简单的方法之一

http://item.jd.com/733388.html using System; using System.Collections.Generic; using System.Linq; using System.ServiceProcess; using System.Text; namespace WindowsService1 { static class Program { /// <summary> /// 应用程序的主入口点. /// </summary> st

C# Windows服务创建安装卸载

一.创建Windows服务 使用VS创建一个新的windows服务应用程序 创建完成之后 二.相关配置 修改Service1名称为StartService(可以不改,自行选择) 添加安装程序并修改配置 安装完成之后,源码中会出现一个ProjectInstaller程序集,双击进入页面修改相关属性                    添加文件夹和实体类 LogHelper.cs 1 using System; 2 using System.Collections.Generic; 3 using

Windows服务二:测试新建的服务、调试Windows服务

一.测试Windows服务 为了使Windows服务程序能够正常运行,我们需要像创建一般应用程序那样为它创建一个程序的入口点.像其他应用程序一样,Windows服务也是在Program.cs的Main()函数中完成这个操作.首先我们在Main()函数中创建一个Windows服务的实例,该实例应该是ServiceBase类的某个子类的对象,然后我们调用由基类ServiceBase类定义的一个Run()方法.然而调用Run()方法并不意味着就开始了Windows服务程序,必须要等到该对象的OnSta

vs2013创建、安装、调试Windows Service程序

Windows服务以服务的形式运行,有些情况下非常有用.用VS2013创建windows服务的过程如下: 创建服务. 1.文件->新建->项目->windows桌面->windows服务,修改你要的项目名称.我这不改名,仍叫WindowsService1,确定. 2.产生的项目文件结构如图所示.右侧的Program.cs文件是入口,Service1.cs是服务文件,所有的逻辑都在这.Service1.cs包含两部分,一部分是Designer,可以在这里面添加各种组件.一部分是后台文

C#——》创建Windows服务,发布并调试Windows服务

一,创建一个windows服务项目.  二,双击Service1.cs进入设计界面,在空白处右键单击选择添加安装程序,如下图所示. 三,添加安装程序后,会进入如下图界面,生成两个组件:serviceProcessInstaller1.serviceInstaller1. 四,设置组件 serviceInstaller1组件的主要属性有: ServiceName: 服务名称,在启动/关闭服务时会需要用到这个属性,用来唯一标识一个服务. StartType:设置为Manual(手动启动),默认停止,

【源码下载】分享一个支持自安装自卸载的Windows服务

这个程序来自  www.codeproject.com 具体的出处就忘了 服务器端的程序,我一般采用在windows服务中调用打开的方式,这样既能看到界面,又能避免系统注销时,程序跟着退出.而且能够支持开机启动. 只在windows server 2003 和.net2.0环境下使用,其他运行环境没有测试 点击服务程序能够实现自安装和自卸载,用起来还是很方便的. 在配置文件中,设定了服务器端程序的位置地址 服务器端程序是另一个程序,用来和客户端进行通讯.windows服务用来打开这个服务器端程序

安装MongoDB(做成Windows服务)并加载C#驱动程序

一 Mongodb简介: 通过查询网上的一些信息来介绍一下Mongodb的优势:MongoDB是一个面向文档的数据库,目前由10gen开发并维护,它的功能丰富,齐全,完全可以替代MySQL.在使用MongoDB做产品原型的过程中,我们总结了MonogDB的一些亮点: 1  使用JSON风格语法,易于掌握和理解:MongoDB使用JSON的变种BSON作为内部存储的格式和语法.针对MongoDB的操作都使用JSON风格语法,客户端提交或接收的数据都使用JSON形式来展现.相对于SQL来说,更加直观

第十三篇 一个安装、管理windows服务的桌面程序

在网上看到一个修改程序入口的程序去把windows 服务修改成控制台的程序,然后利用控制台的程序把服务安装和管理,也想起自己原来也写了一个对windows 报务管理的程序,不过是winform的. 界面如下(自己使用,界面比较丑陋): 首先需要添加一个帮助类: 代码如下: class Windows { /// <summary> /// 检查服务存在的存在性 /// </summary> /// <param name=" NameService "&g