zoukankan      html  css  js  c++  java
  • Windows服务操作之sc和net命令及windows任务计划

    看个粟子:

     1、“新建项目”——“Window服务”

    生成的目录结构

    双击“MainService.cs”,右键点击“添加安装程序”,自动会生成Projectinstaller.cs文件以及两个安装组件,对两个组件更名并做属性设置:

    对服务的启动与停止添加代码

    using System;
    using System.Diagnostics;
    using System.IO;
    using System.ServiceProcess;
    using System.Timers;
    
    namespace MainService
    {
        public partial class MainService : ServiceBase
        {
            private Timer time = new Timer();
            public MainService()
            {
                InitializeComponent();
            }
    
            protected override void OnStart(string[] args)
            {
                WriteLog("服务启动,时间:" + DateTime.Now.ToString("HH:mm:ss") + "
    ");
    
                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") + "
    ");
            }
    
            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
                {
                }
            }
        }
    }
    View Code

    添加windows窗体应用程序,命名为:InstallService

    对启动程序添加代码:

    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Linq;
    using System.Text;
    
    namespace InstallService
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("这是Windows应用程序");
                Console.WriteLine("请选择,[1]安装服务 [2]卸载服务 [3]退出");
      
     
                var rs = int.Parse(Console.ReadLine());
                switch (rs)
                {
                    case 1:
                        //取当前可执行文件路径,加上"s"参数,证明是从windows服务启动该程序
                        var path = Process.GetCurrentProcess().MainModule.FileName;
                        Process.Start("sc", "create myserver binpath= "" + path + "" displayName=MainService start= auto");
                        //因sc命令安装后未看到描述,我怀疑安装的服务不一定是我所创建的MainService服务项目,这为添加描述
                        Process.Start("sc", "description myserver "利用空闲的网络带宽在后台传输文件。如果服务被停用,例如 Windows Update 和 MSN Explorer 的功能将无法自动下载程序和其他信息。如果此服务被禁用,任何依赖它的服务如果没有容错技术以直接通过 IE 传输文件,一旦 BITS 被禁用,就可能无法传输文件。"");
                        Console.WriteLine("安装成功");
                        Console.Read();
                        break; 
                    case 2:
                        Process.Start("sc", "delete myserver");
                        Console.WriteLine("卸载成功");
                        Console.Read();
                        break; 
                    case 3: 
                        break;
                }
            }
        }
    }

    启动程序:

    1安装后

    运行“services.msc"打开服务管理器

    我手动启动失败

    所以我怀疑我安装的只是一个名字,与我添加的服务没有什么关系

    选2

    卸载成功

    可看net命名安装与卸载可参看:http://www.cnblogs.com/qk2014/p/4869675.html

    windows服务操作命令有sc和net 两个命令;

    使用sc命令:

    1 修改服务启动类型

    sc config 服务名 start= demand (设置服务为手动启动)

    start= auto (设置服务为自动启动)

    start= disabled (设置服务为禁用)

    2 安装服务:sc create 服务名

    3 停止服务:sc stop 服务名

    4 卸载服务:sc delete 服务名(卸载前先停止服务)

    使用net命令

    查看运行的服务: net start

    启动服务: net start 服务名

    停止服务: net stop 服务名

    卸载服务: 服务名 -uninstall (卸载前先停止服务)

    虽然2个都能达到停止服务和启动服务的效果,但是在重启服务时,就是使用批处理先stop后start来实现重启时,如果服务处于启动状态使用sc的stop后start,结果服务不能启动,因为sc命令在执行stop后不会等待马上继续执行批处理下面的语句,这时服务正在处于停止操作状态,所以start命令不能启动。

    net命令在stop时会停止等待,在服务完全停止后再继续执行批处理后面的语句,所以net的重启命令就会正常。

    windows服务安装与卸载批处理指令:

    安装:

    %SystemRoot%Microsoft.NETFrameworkv4.0.30319installutil.exe "D:projectpsssYGPS.PSSYGPS.PSS.PrintServiceinDebugYGPS.PSS.PrintService.exe"
    Net Start WinPrintService
    sc config WinPrintService start= auto
    pause

    卸载:

    sc stop WinPrintService
    %SystemRoot%Microsoft.NETFrameworkv4.0.30319installutil.exe /u "D:projectpssYGPS.PSSYGPS.PSS.PrintServiceinDebugYGPS.PSS.PrintService.exe"
    pause

    bat设置windows计划任务

    设置定时任务
    @echo off
    set NAME=dailybackup
    set TIME=20:01:00
    set DAY=MON,TUE,WED,THU,FRI,SAT,SUN
    set COMMAND=cscript.exe %~dp0dailybak.vbs
    
    %SystemDrive%
    cd %windir%	asks
    if exist %NAME%.job del %NAME%.job
    
    schtasks /create /tn %NAME% /tr "%COMMAND%" /sc weekly /d %DAY% /st %TIME% /ru system
    在含有看空格的参数或则路径前面加上 " 进行转义,这样就ok
    demo: schtasks /create /sc minute /mo 30 /tn "finaltest" /tr ""d:program filesmth.bat"" "'20' '302'"

    Windows_批处理+任务计划实现文件夹定时备份

    SVN.bat

    @echo off
    echo 本批处理为Ls_man原创
    echo 更多精彩博文请访问http://blog.csdn.net/ls_man echo 或登陆求知域官网http://www.qqextra.com color 0b & cls
    echo 设置要备份的文件夹...
    set "pbuf=D:VisualSVN_Repositories"
    echo 设置备份文件存放文件夹...
    set "tbuf=G:Backup_VisualSVN_Repositories"
    
    echo 初始化压缩程序设置...
    cd 
    C:
    cd C:Program FilesWinRAR
    set yes=ok
    echo 压缩程序在C:Program FilesWinRARWinRAR.exe
    
    echo 设置备份文件名(以星期几命名,即备份文件只保存最近一周)...
    set name=%date%
    set name=%name:~-3%
    set name=svn_backup_%name%
    
    echo 是否存在同名文件,若存在则删除同名文件...
    if exist %tbuf%\%name%.rar del %tbuf%\%name%.rar
    
    echo 开始执行压缩备份...
    rar a -r -ed -esh %tbuf%\%name%.rar %pbuf%*.*
    echo 备份完毕!

    由于要备份的文件夹和存放备份的文件夹及WinRaR的安装路径可能不同,根据实际情况修改即可。
    下一步就是添加任务计划,打开控制面板-任务计划-添加任务计划,设置每天执行备份.bat,最好在晚上执行如凌晨1点。

    扩展:

    http://www.cnblogs.com/qk2014/p/4869675.html

    http://www.cnblogs.com/testlife007/p/4396248.html

    http://www.cnblogs.com/DelphiFan/archive/2009/03/10/1645579.html

    http://www.cnblogs.com/a311300/archive/2010/12/30/1922229.html

    http://www.cnblogs.com/wpcnblog/p/4732390.html

    http://www.cnblogs.com/zcy-628/archive/2012/08/22/2650805.html

    http://www.cnblogs.com/smileberry/p/4210245.html

    http://www.cnblogs.com/knowledgesea/p/3616127.html

    http://www.cnblogs.com/dongzhiquan/p/3231498.html

    http://blog.csdn.net/ls_man

  • 相关阅读:
    Unity3D Resources TextAsset 正文
    使用位操作
    Chapter 3 Protecting the Data(3):创建和使用数据库角色
    找呀志_ContentResolver操作ContentProvider数据
    c#委托实例化和调用语句
    有意练习--Rails RESTful(一)
    对于晚辈:阅读经典“乱搭”形成了自己的“制”
    Eclipse SDK构建J2EE开发环境
    7.oracle学习门户系列七---网络管理和配置
    netback于kthread遇到cpu affinity问题
  • 原文地址:https://www.cnblogs.com/shy1766IT/p/5059523.html
Copyright © 2011-2022 走看看