c#写windows服务

c#写windows服务

序言

前段时间做一个数据迁移项目,刚开始用B/S架构做的项目,但B/S要寄存在IIs中,而IIs又不稳定因素,如果重启IIs就要打开页面才能运行项目。有不便之处,就改用Windows服务实现。这篇就总结下,windows服务的编写,调试,安装卸载。

Windows服务介绍

Microsoft Windows 服务能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序。这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面。这使服务非常适合在服务器上使用,或任何时候,为了不影响在同一台计算机上工作的其他用户,需要长时间运行功能时使用。还可以在不同于登录用户的特定用户帐户或默认计算机帐户的安全上下文中运行服务。本文就向大家介绍如何运用Visual C#来一步一步创建一个文件监视的Windows服务程序,然后介绍如何安装、测试和调试该Windows服务程序。

创建Windows服务

创建好项目之后 --- >> 双击 Service1.cs  ---- >>  出现一个设计界面   ---->> 右键界面  --- >> 弹出对话框选择添加安装程序

上面一系列操作完成后,就可以对windows服务名称描述以及启动方式等进行修改。

[RunInstaller(true)]

    public class Installer1 : System.Configuration.Install.Installer
    {

        /// <summary>
        /// 必需的设计器变量。
        /// </summary>
        private System.ComponentModel.Container components = null;
        private System.ServiceProcess.ServiceProcessInstaller spInstaller;
        private System.ServiceProcess.ServiceInstaller sInstaller;

        public Installer1()
        {
            // 该调用是设计器所必需的。
            InitializeComponent();
            // TODO: 在 InitComponent 调用后添加任何初始化
        }

        #region Component Designer generated code
        /// <summary>
        /// 设计器支持所需的方法 - 不要使用代码编辑器修改
        /// 此方法的内容。
        /// </summary>
        private void InitializeComponent()
        {
            components = new System.ComponentModel.Container();
            // 创建ServiceProcessInstaller对象和ServiceInstaller对象
            this.spInstaller = new System.ServiceProcess.ServiceProcessInstaller();
            this.sInstaller = new System.ServiceProcess.ServiceInstaller();

            // 设定ServiceProcessInstaller对象的帐号、用户名和密码等信息
            this.spInstaller.Account = System.ServiceProcess.ServiceAccount.LocalSystem;
            this.spInstaller.Username = null;
            this.spInstaller.Password = null;

            // 设定服务名称
            this.sInstaller.ServiceName = "PmsDataUpdateService";
            //服务描述
            this.sInstaller.Description = "hi longhao !";

            // 设定服务的启动方式
            this.sInstaller.StartType = System.ServiceProcess.ServiceStartMode.Automatic;

            this.Installers.AddRange(
                new System.Configuration.Install.Installer[] { this.spInstaller, this.sInstaller });
        }

        #endregion

    }

修改好后回头,写入自己想要的操作。Service1.cs出现设计界面,双击设计界面进入cs代码页。可以重写这些方法。

  protected override void OnStart(string[] args)
       {
           //服务开启执行代码
       }
       protected override void OnStop()
       {
           //服务结束执行代码
       }
       protected override void OnPause()
       {
           //服务暂停执行代码
           base.OnPause();
       }
       protected override void OnContinue()
       {
           //服务恢复执行代码
           base.OnContinue();
       }
       protected override void OnShutdown()
       {
           //系统即将关闭执行代码
           base.OnShutdown();
       }

除此之外还有一个Program.cs文件:打开看下。

使得一个Windows服务程序能够正常运行,我们需要像创建一般应用程序那样为它创建一个程序的入口点。在Windows服务程序中,我们也是在Main()函数中完成这个操作的。首先我们在Main()函数中创建一个Windows服务的实例,该实例应该是ServiceBase类的某个子类的对象,然后我们调用由基类ServiceBase类定义的一个Run()方法。然而Run()方法并不就开始了Windows服务程序,我们必须通过前面提到的服务控制管理器调用特定的控制功能来完成Windows服务程序的启动,也就是要等到该对象的OnStart()方法被调用时服务才真正开始运行。如果你想在一个Windows服务程序中同时启动多个服务,那么只要在Main()函数中定义多个ServiceBae类的子类的实例对象就可以了,方法就是创建一个ServiceBase类的数组对象,使得其中的每个对象对应于某个我们已预先定义好的服务。

 /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        static void Main()
        {
            ServiceBase[] ServicesToRun;
            ServicesToRun = new ServiceBase[]
            {
                new Service1(),
                new Service2()
            };
            ServiceBase.Run(ServicesToRun);
        }

如果你在你需要的函数里面写过你需要的方法后,点运行则不可运行。

安装卸载windows服务

1、安装需要用,这个小玩意可以在网上下载到的。

2、把他放到你编写好的服务程序/bin/Debug文件夹下。

3、打开

4、用命令读到你服务.exe文件夹下。

5、运行 installutil.exe

6、安装服务命令: installutil  yourservices.exe

7、卸载服务命令: installutil  /u  yourservices.exe

注意的是:安装跟卸载需要保证程序是一样的,没有变更过的,要不会提示卸载不干净。也就是在已安装过服务的时候,不要在vs中修改你的程序。

调试windows服务

保证你的服务已安装成功,且处于启动模式。

点调试--->> 附加到进程

即可。

注意的是:

打开任务管理器:结束进程。

时间: 2024-10-12 12:39:01

c#写windows服务的相关文章

用python写windows服务

用python写windows服务(1) 以python2.5 为例需要软件 * python 2.5        * pywin32(与2.5 版本相匹配的) Service Control Manager (SCM) 服务管理器(SCM) 是windows NT的 一部分,所有服务必须通过SCM 注册,SCM负责启动,停止服务等. 当一个进程通过SCM注册后, 有如下特质: * 运行该进程的用户,未必是当前登录的用户.        * 该进程如果依赖其他服务,哪么该服务启动前,依赖服务回

不用写Windows服务实现定时器功能(FluentScheduler )

链接:http://www.cnblogs.com/mafly/p/FluentScheduler.html MacBook Pro 只有四个 USB Type-C 接口是否错了? 一项新技术的诞生总会对已存在的事物造成冲击或影响,如果大家都害怕冲击与影响,那这个世界永远像现在不变就行了,大家都好好的,待在自己的舒适区,社会丝毫没有创新与进步而言. 其实, USB Type-C 接口协议在三年前几个科技巨头公司就参与制定了协议,并答应要在自家的产品上推广它,但谁都怕一下子在自家产品上升级 USB

C# 使用vs2013 写 windows服务

第一步:添加windows服务项目 并起一个 好看的名字 第二步:添加安装程序 第三步:右键点击serviceProcessInstaller1属性,在Account中选择LocalSystem 第四步:右键点击serviceInstaller1 属性,在serviceName修改自己服务需要的名称 第五步:点击ServerTest选择查看代码 OnStart 是服务启动时 会运行的 启动方法  我们一般会用一个线程去定义 OnStop 是 服务停止时 会运行的方法,一般写一些 资源回收的方法

使用C#写windows服务

首先,创建一个windows服务项目

Python写自动化之写一个Windows 服务

Python 写windows 服务,需要使用 pywin32包. 直接上代码: #encoding=utf8 ''' Created on 2014-7-1 @author: wangmengnan ''' import os import sys import win32serviceutil import win32service import win32event class PythonService(win32serviceutil.ServiceFramework): #服务名 _

ASP.NET MVC 中应用Windows服务以及Webservice服务开发分布式定时器

ASP.NET MVC 中应用Windows服务以及Webservice服务开发分布式定时器一:闲谈一下:1.现在任务跟踪管理系统已经开发快要结束了,抽一点时间来写一下,想一想自己就有成就感啊!!  2.关于任务跟踪管理系统项目中遇到的Windows服务以及Webservice的综合应用的问题. 大家好这是我第二次写博客 ,写的不好请大家多多谅解, 希望大家可以多多指正. 二:我稍微的整理了一下关于这个分布式定时器需求:1.根据任务跟踪管理系统中的数据库的AnswerSheet 表格中找到客户编

windows服务启动有界面的程序

大家写windows服务守护进程的时候,肯定会遇到启动的程序看不到界面,只能看到exe问题. 那么发现可能有如下情况 a.无论是开机,还是程序被关掉后,服务启动的程序只能看到exe,看不到界面; b.开机后,服务自动启动程序,只能看到进程里面有exe,看不到界面,但是杀掉进程重启后,能看到界面; 我来给出解决方法:1.服务中的启动程序代码用如下方法: string appStartPath = @"C:\Test.exe"; IntPtr userTokenHandle = IntPt

更改windows服务的配置文件(app.config)必须重启服务才能生效吗?

这个问题是前一阶段写windows服务碰到的.本来在写获取配置文件的某个配置的值的时候,通常我都是写类似下面的这么一个静态方法来获取: 1: /// <summary> 2: /// 获取每次处理记录数 3: /// </summary> 4: /// <returns></returns> 5: private static int GetRecordCount() 6: { 7: int recordCount = 10000; 8: try 9: {

vs2015开发Windows服务

工作已经很久,时隔这么长时间写这篇文章是给自己以后做参考.也不至于以后长时间不写Windows服务而忘记整个开发过程.windows服务开发,基础的就不说了,直接上过程. 1.新建windows服务项目,我这里选择的是Framework4.0,没有选择高版本是为了防止在服务在一些低版本系统上无法正常运行. 2.添加Windows服务的安装程序. 在默认Service1设计器界面空白处点击右键->添加安装程序,系统会自动新建一个带有默认配置的安装程序类,如下图: 新建完安装程序后,需要给默认的se