zoukankan      html  css  js  c++  java
  • C# 编写windows服务及服务的安装、启动、删除、定时执行任务

    一、编写windows服务 

    1、VS2017  - 创建服务Myservice

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

    3、在设计界面修改 serviceProcessInstaller1的属性 Account 为 LocalSystem  (也可用代码修改)

    4、在设计界面修改 serviceInstaller1 的属性: display 为  myfirstservice  ;    description 为 我的首个服务  ;   StartType 为 Automatic

    5、修改Service1.cs 代码如下:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Diagnostics;
    using System.Linq;
    using System.ServiceProcess;
    using System.Text;
    
    namespace myservice
    {
        public partial class Service1 : ServiceBase
        {
            public Service1()
            {
                InitializeComponent();
            }
    
            protected override void OnStart(string[] args)
            {
                // TODO: 在此处添加代码以启动服务。
                System.IO.File.AppendAllText(@"D:Log.txt", " Service Start :" + DateTime.Now.ToString());
            }
    
            protected override void OnStop()
            {
                // TODO: 在此处添加代码以执行停止服务所需的关闭操作。
                System.IO.File.AppendAllText(@"D:Log.txt", " Service Stop :" + DateTime.Now.ToString());
            }
        }
    }

    6、生成解决方案,可以在项目的dubug目录中找到 myservice.exe

    二、SC命令=====安装、开启、配置、关闭windows服务

    1、将myservice.exe放在英文目录下,我的是  d:myservice.exe

    2、在cmd中,转到D:并执行以下使命令进行服务安装和启动(这里的myserv 是自定义的名字)

    sc create myserv  binPath= "d:/myservice.exe"

    sc config  myserv start= auto //(自动) (DEMAND----手动、DISABLED----禁用) 并且start连着= ,而=的后面有一个空格 net start myserv

    可以看到d盘下已生成了log.txt

    3.删除服务,执行以下代码

      sc delete myserv

    4、为方便使用,可编辑为bat批处理文件

    @echo.服务启动......  
    @echo off  
    @sc create myserv1 binPath= "d:demo.exe"  
    @net start myserv1 
    @sc config myserv1 start= AUTO  
    @echo off  
    @echo.启动完毕!  
    @pause  

    5.或在程序中用以下代码安装(参考http://www.cnblogs.com/pingming/p/5115320.html)

    //安装服务
    string path = @"D:demo.exe";
                        Process.Start("sc", "create myDemo binPath= "" + path + "" ");
                        Console.WriteLine("安装成功");
    
    
    //卸载服务
                        Process.Start("sc", "delete KJLMDemo");
                        Console.WriteLine("卸载成功");
                        break;

    6、定时执行任务:参考 https://www.cnblogs.com/Beau/p/3491063.html 

    //开始事件
            protected override void OnStart(string[] args)
            {
                 //定时事件
                MyTimer(); 
            }
    
            //结束事件
            protected override void OnStop()
            {
                writeLog("服务结束时间:"  + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
            }
    
    
            //实例化System.Timers.Timer   
            private void MyTimer()
            {
                System.Timers.Timer MT = new System.Timers.Timer(30000);
                MT.Elapsed += new System.Timers.ElapsedEventHandler(MTimedEvent);
                MT.Enabled = true;
    
            }
    
            //构造System.Timers.Timer实例   间隔时间事件   
            private void MTimedEvent(object source, System.Timers.ElapsedEventArgs e)
            {
    
                //实现方法
                
            }

     关于定时器,System.Windows.Forms.Timer与System.Timers.Timer的区别,参考这里:http://www.cnblogs.com/lonelyxmas/archive/2009/10/27/1590604.html

  • 相关阅读:
    vue scrollTop的使用方法
    常见简体繁体转换
    远程桌面发生身份验证错误,要求的函数不受支持
    发布版找不到字体,控制台会报错问题处理
    sql进阶-自增字段的数据修改
    sql序列(6)游标
    sql序列(1)新建文件夹、建库
    sql进阶-触发器的实现
    sql进阶-@@rowcount详解
    单条数据横向滚动
  • 原文地址:https://www.cnblogs.com/pu369/p/9970911.html
Copyright © 2011-2022 走看看