zoukankan      html  css  js  c++  java
  • C# VS 2010创建、安装、调试 windows服务(windows service)

    1.创建 windows服务 项目
      文件 -> 新建项目 -> 已安装的模板 -> Visual C# -> windows ,在右侧窗口选择"windows 服务"

    2.系统已经为我们建立了一个 Service1.cs 组件,测试时我们就用它了.
     如果要新件的话,右键项目 -> 添加 -> 新建项 -> windows 服务。

    3.在 Service1.cs 上 ,按 F7 (右键查看代码),打开代码页。加入我们测试用的代码。
      注意:下面的几个方法中的 str 变量,为了我们一会儿调试时设置断点用的!

     1  using System;
     2  using System.Diagnostics;
     3  using System.ServiceProcess;
     4 
     5  namespace WindowsService1
     6  {
     7   public partial class Service1 : ServiceBase
     8   {
     9    public Service1()
    10    {
    11     InitializeComponent();
    12     InitService();
    13    }
    14 
    15    /// <summary>
    16    /// 初始化服务参数
    17    /// </summary>
    18    private void InitService()
    19    {
    20     base.AutoLog = false;
    21     base.CanShutdown = true;
    22     base.CanStop = true;
    23     base.CanPauseAndContinue = true;
    24     base.ServiceName = "Service1";  //这个名字很重要,设置不一致会产生 1083 错误哦(在文章最后会说到这个问题)!
    25    }
    26    protected override void OnStart(string[] args)
    27    {
    28     string str ="服务开启";
    29    }
    30 
    31    protected override void OnStop()
    32    {
    33     string str ="服务停止";
    34    }
    35    protected override void OnContinue()
    36    {
    37     string str ="服务继续运行";
    38     base.OnContinue();
    39    }
    40    protected override void OnPause()
    41    {
    42     string str ="服务暂停";
    43     base.OnPause();
    44    }
    45   }
    46  }

    4.建立服务的“安装程序”
    4.1 双击”Service1.cs“,打开 Service1.cs 的视图设计器
    4.2 在视图设计器中任意位置右键,选择”添加安装程序“ 
    4.3 这时项目跟目下将出现一个 ProjectInstaller.cs 的组件
        (如果是第一次添加”安装程序“的话)
    4.4 双击 ProjectInstaller.cs 打开 ProjectInstaller  的视图设计器
    4.5 找到 serviceInstaller1 组件,选中后按 F4 键,设置组件属性。
      Description=“测试服务1”;
      DisplayName=“Service1”;
      ServiceName=“Service1”;//这个值必须和 WindowsService1.InitService() 方法下设置的 base.ServiceName 属性一至。
      StartType 为服务运行类型,根据你的需要设置即可。(Manual:手动启动,AutoMatic 为自动启动)
    4.6 找到 serviceProcessInstaller1 组件,选中后按 F4 键,设置组件属性。
      Account=“LocalSystem”; //设置为其他的属性在开启服务时,会提示输入用户名和密码
    4.7 这样就完成了一个服务的所有准备,下面就是安装和测试工作。

    5.生成组件
     右键项目,选择“生成”。

    6.安装组件
    6.1 使用 InstallUtil.exe 工具注册组件服务,文件位置在不同版本的 framework 中。我用的是 4.0 所以在一下位置
     C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe
    6.2 打开生成目录,如果生成成功会有一个 WindowsService1.exe 文件
    6.3 在生成目录根目录下新加两个 bat(批处理文件),用于安装和卸载服务
      新建一个文本文件,打开文件加入以下两行命令
      C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe D:\WindowsService1.exe
      pause
      保存后关闭文本文件,之后将其重命名为“安装服务.bat”文件,注意要修改后缀名为 .bat!

      再新建一个文本文件,打开文件加入以下两行命令
      C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe /u D:\WindowsService1.exe
      pause
      保存后关闭文本文件,之后将其重命名为“卸载服务.bat”文件,注意要修改后缀名为 .bat!
    6.4 “安装服务.bat”文件,安装windows 服务

    7.安装成功后需要手动开启服务,因为我们刚设置 serviceInstaller1.StartType 为 Manual
     打开windows 服务管理器,找到名为 Service1 的服务,右键属性。点击【启动】按钮

    8.windows 调试
    8.1 回到开发环境,选择调试->附加到进程,勾选”显示所有用户进程“
    8.2 找到 WindowsService1.exe 进程(如果没有点击下刷新按钮),选中后点击“附加到进程”按钮。
    8.3 选中 Service1.cs 文件,后按 F7 打开代码视图
    8.4 在所有 str 变量上添加调试断点
    8.5 回到windows服务管理器,找 Service1 服务并选中它,在左侧有一个“暂停”按钮。点击一下
      这时,OnPause 方法下的断点命中!OK 达到了调试的目的了

    9.如果想一次安装多个服务,需要按照 2~5 的步骤多添加几个服务就好了!
     
    --------------------------------------------------------------------------------------
    问题及解决方案
    注册成功后,启动 Windows服务 时遇到错误:1083 的解决办法
    1.查看 Main() 方法中是否启动了指定的服务

    1  ServiceBase[] ServicesToRun;
    2  ServicesToRun = new ServiceBase[]
    3  {
    4   new Service1(),
    5   new Service2() //如果建立多个服务需要添加这段代码
    6  };
    7  ServiceBase.Run(ServicesToRun);


    2.确保 ProjectInstaller.cs 视图设计器中的 serviceInstaller1 组件的 ServiceName 属性
      与 Service1.cs 组件的 ServiceName 属性一致

  • 相关阅读:
    简单说说数据库表设计的三种范式
    存储过程简单的动态订单号
    Asp.Net页面生命周期
    jq 小笔记,上传判断其格式
    吃一垫长一智
    离散事件模拟
    二叉树查找树
    冷暖自知
    基督徒的人生箴言
    迷宫寻路
  • 原文地址:https://www.cnblogs.com/wang726zq/p/windowService.html
Copyright © 2011-2022 走看看