zoukankan      html  css  js  c++  java
  • window 服务(一)

    windows服务应用程序是一种长期运行在操作系统后台的程序,它对于服务器环境特别适合,它没有用户界面,不会产生任何可视输出,任何用户输出都回被写进windows事件日志。计算机启动时,服务会自动开始运行,他们不要用户一定登陆才运行。

    可以通过选择菜单“开始”-〉“控制面板”-〉“管理工具”-〉“服务”来查看现有系统中的服务,如下图:

    创建window 服务

    新建一个window 服务项目MyService,如下图

    从工具箱的组件表中拖动一个Timer对象到这个视图设计器上面。

    设置Timer属性,Enable为true,Interval属性为3000毫秒

    双击Timer事件,添加事件

           

    后台代码
     1    public partial class Service1 : ServiceBase
     2     {
     3         public Service1()
     4         {
     5             InitializeComponent();
     6         }
     7 
     8         protected override void OnStart(string[] args)
     9         {
    10             // TODO: 在此处添加代码以启动服务。
    11         }
    12 
    13         protected override void OnStop()
    14         {
    15             // TODO: 在此处添加代码以执行停止服务所需的关闭操作。
    16         }
    17 
    18         private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    19         {
    20 
    21         }
    22     }
     1  public partial class Service1 : ServiceBase
     2     {
     3         public Service1()
     4         {
     5             InitializeComponent();
     6         }
     7         protected override void OnStart(string[] args)
     8         {
     9             // TODO: 在此处添加代码以启动服务。
    10             string state = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "启动";
    11             WriteLog(state);
    12         }
    13         protected override void OnStop()
    14         {
    15             // TODO: 在此处添加代码以执行停止服务所需的关闭操作。
    16             string state = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "停止";
    17             WriteLog(state);
    18         }
    19         private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    20         {
    21             WriteLog(DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"));
    22         }
    23         public void WriteLog(string str)
    24         {
    25             using (StreamWriter sw = File.AppendText(@"c:\service.txt"))
    26             {
    27                 sw.WriteLine(str);
    28                 sw.Flush();
    29             } 
    30         }
    31     }

    其中OnStart和OnStop分别是服务器启动和停止后,所发生的事件操作方法,WriteLog是操作方法;

    将服务程序service1.cs 切换到视图模式,用鼠标右键单击设计视图选择“添加安装程序”选项,此后在项目中自动增加了一个ProjectInstaller.cs,如下图

    设置serviceInstaller1组件属性,

    ServiceName=MyServiceLog安装服务器名字;

    StartType=Automatic  开机自动启动

    设计serviceProcessInstaller1的属性Account=LocalSystem;

    运行编译,一个简单的windows服务已经开发完成

    注:如果在代码中的文件路径写成如下“service.txt”,那么此时文件保存在C:\WINDOWS\system32文件夹中。

    安装window服务

    安装命令:InstallUtil.exe MyServiceLog.exe

    InstallUtil存在路径为:C:\WINDOWS\Microsoft.NET\Framework\.NET版本号

    复制C:\WINDOWS\Microsoft.NET\Framework\版本号  路径中的InstallUtil.exe 到bin/debug或bin/release文件夹中,在命令行窗口中直接运行命令

    InstallUtil.exe MyServiceLog.exe,在系统中注册这个服务,使它建立一个合适的注册项,如下图:

    然后再window服务列表中,启动MyServiceLog服务

    卸载window 服务

    命令:InstallUtil.exe MyServiceLog.exe /u

    如果修改这个服务,但是路径没有变化的话是不需要重新注册服务的,直接停止服务,然后用新的文件覆盖原来的文件即可,如果路径发生变化,应该先卸载这个服务,然后重新安装这个服务。

     Window服务应用程序体系结构

    .net framework对windows服务提供了更多的支持,在命名空间System.ServiceProcess下.

    包括类如下:

    ServiceBase 所有Window服务的基类

    ServiceController 该类的一个实例代表一个具体的windows服务

    ServiceControllerPermission 用于控制ServiceController的使用权限

    ServiceInstaller 用于执行对windows服务的安装

    ServiceProcessInstaller 用于执行对windows服务的安装,与上类的不同的是,该类可以代表一个可以执行的windows服务的进程.

    ServiceBase类

    ServiceBase方法:

    方法

    描述

    Run()

    运行一个windows服务

    OnContinue()

    继续执行服务

    OnCustomCommand()

    向windows服务发出自定指令

    OnPause()

    暂停正在运行的windows服务

    OnPowerEvent()

    当计算机的电源状态改变是调用

    OnShutDown()

    当系统关闭条用OnStart()开始一个windows服务

    OnStop()

    结束一个windows服务

     ServiceBase属性:

    属性

    描述

    AutoLog

    表示是否将开始,结束,暂停,继续等指令写入事件日志

    CanHandlePowerEvent

    表示该服务是否支持电源事件

    CanPauseAndContinue

    表示该服务是否支持暂停和继续功能

    CanShutDown

    表示该服务是否支持关闭功能

    CanStop

    表示该服务是否支持结构功能

    EventLog

    应用程序的时间日志

    ServiceName

    该服务名称

    ServiceController类

    服务控制类,用于控制windows服务的各种具体行为,它既可以控制本地的windows服务,有可以控制远程的windows服务。

    ServiceControler的方法:

    方法

    描述

    GetDivices()

    得到一台计算机上设备驱动器服务

    GetServices()

    得到一台计算上的非设备驱动器服务

    Close()

    用于断开服务连接,并且释放服务控制器所占用的资源

    Continue()

    继续被暂停的服务

    ExcuteCommand()

    对服务执行一条自定义命令

    Pause()

    暂停服务

    Refresh()

    对所有属性更新

    Start()

    启动服务

    Stop()

    停止服务

    WaitForStatus()

    等待服务到达指定的状态

  • 相关阅读:
    基本命令
    Unicode Locale
    二进制查看编辑
    java reg
    java util
    js util
    跑到X
    [转]Linux AIO :libaio
    [转]c++ atomic操作
    [转] dpdk笔记
  • 原文地址:https://www.cnblogs.com/hfliyi/p/2635290.html
Copyright © 2011-2022 走看看