博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
windows服务的创建、安装和调试
阅读量:5138 次
发布时间:2019-06-13

本文共 3005 字,大约阅读时间需要 10 分钟。

1.创建 windows服务 项目

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

2.系统已经为我们建立了一个 Service1.cs ,测试时我们就用它了.

 如果要新件的话,右键项目 -> 添加 -> 新建项 ->  服务。

3.在 Service1.cs 上 ,按 F7 (右键查看代码),打开代码页。加入我们测试用的代码。

  注意:下面的几个方法中的 str 变量,为了我们一会儿调试时设置断点用的!

 using System;

 using System.Diagnostics;
 using System.ServiceProcess;

 namespace WindowsService1

 {
  public partial class Service1 : ServiceBase
  {
   public Service1()
   {
    InitializeComponent();
    InitService();
   }

   /// <summary>

   /// 初始化服务参数
   /// </summary>
   private void InitService()
   {
    base.AutoLog = false;
    base.CanShutdown = true;
    base.CanStop = true;
    base.CanPauseAndContinue = true;
    base.ServiceName = "Service1";  //这个名字很重要,设置不一致会产生 1083 错误哦!
   }
   protected override void OnStart(string[] args)
   {
    string str ="服务开启";
   }

   protected override void OnStop()

   {
    string str ="服务停止";
   }
   protected override void OnContinue()
   {
    string str ="服务继续运行";
    base.OnContinue();
   }
   protected override void OnPause()
   {
    string str ="服务暂停";
    base.OnPause();
   }
  }
 }

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 WindowsService1.exe
  pause
  保存后关闭文本文件,之后将其重命名为“安装服务.bat”文件,注意要修改后缀名为 .bat!

  再新建一个文本文件,打开文件加入以下两行命令

  C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe /u 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() 方法中是否启动了指定的服务
 ServiceBase[] ServicesToRun;
 ServicesToRun = new ServiceBase[]
 {
  new Service1(),
  new Service2() //如果建立多个服务需要添加这段代码
 };
 ServiceBase.Run(ServicesToRun);

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

  与 Service1.cs 组件的 ServiceName 属性一致

 

转载于:https://www.cnblogs.com/dyllove98/p/3184869.html

你可能感兴趣的文章
完整的Socket代码
查看>>
PE知识复习之PE的导入表
查看>>
POJ 3280 Cheapest Palindrome
查看>>
HDU 2076 夹角有多大(题目已修改,注意读题)
查看>>
Objective-C非正式协议与正式协议
查看>>
洛谷P3676 小清新数据结构题(动态点分治)
查看>>
SPOJ DQUERY D-query(主席树 区间不同数个数)
查看>>
八 Civil3d常用显示样式的编辑与创建 ----点标签样式2
查看>>
九校联考-DL24凉心模拟Day2T1 锻造(forging)
查看>>
生产阶段Webpack打包【基础打包】
查看>>
Cortex M3/M4 学习摘要(二)
查看>>
C#时间的味道——任时光匆匆我只在乎你
查看>>
(1)数据结构——线性表(数组)实现
查看>>
SpringMyBatis解析2-SqlSessionFactoryBean
查看>>
按照excel文档中的内容在当前cad图纸中自动排布实体
查看>>
Winform开发框架之图表报表在线设计器2-图表-SNF.EasyQuery项目--SNF快速开发平台3.3-Spring.Net.Framework...
查看>>
C#基础第八天-作业-设计类-面向对象方式实现两个帐户之间转账
查看>>
洛谷 P3237 [HNOI2014]米特运输
查看>>
Attributes.Add用途与用法
查看>>
JavaScript面向对象初探——封装和继承
查看>>