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

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

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 属性一致

windows服务的创建、安装和调试的更多相关文章

  1. 关于windows服务的编写/安装/与调试

    前注: 首先,这篇文章是从网上转过来的,因为最近有个项目,需要编写一个Windows Service来定时执行程序,网上很容易找到了这篇文章,大概看了一下,文章讲的还是很详细的.不过这篇文章应该是.n ...

  2. windows服务的创建、安装、调试全过程及引发的后续学习

    前几天做项目的时候需要用到window服务,研究一段时间,算是掌握了最基本的使用方法吧,现总结如下: 引言:在项目过程中碰到一个问题:需要不断的扫描一个大型数据库表,并获取dataset,以便做后续的 ...

  3. C# Windows服务的创建、安装、调试

    一.查看已有的Windows服务 选择菜单"开始"-〉"控制面板"-〉"管理工具"-〉"服务"来查看现有系统中的服务 二 ...

  4. Windows服务的快速搭建与调试(C#图解)

    Windows服务的快速搭建与调试(C#图解)   目录 一.什么是Windows 服务? 二.创建Windows 服务与安装/卸载批处理. 三.调试Windows 服务. 正文 一.什么是Windo ...

  5. 玩转Windows服务系列——创建Windows服务

    创建Windows服务的项目 新建项目->C++语言->ATL->ATL项目->服务(EXE) 这样就创建了一个Windows服务项目. 生成的解决方案包含两个项目:Servi ...

  6. 玩转Windows服务系列——创建Windows服务

    原文:玩转Windows服务系列——创建Windows服务 创建Windows服务的项目 新建项目->C++语言->ATL->ATL项目->服务(EXE) 这样就创建了一个Wi ...

  7. windows service 的创建 安装 调试 错误回发

    关于如何快速创建一个windows服务 1.在vs中创建windows服务 名称:你要写的服务名称 位置:创建服务所在的位置 点击确定 2.代码编写 3.添加安装程序 点击添加安装程序出现 分别右击设 ...

  8. C# windows服务的创建与调试

    Windows Service这一块并不复杂,但是注意事项太多了,网上资料也很凌乱,偶尔自己写也会丢三落四的.所以本文也就产生了,本文不会写复杂的东西,完全以基础应用的需求来写,所以不会对Window ...

  9. 【转】C# windows服务的创建与调试

    Windows Service这一块并不复杂,但是注意事项太多了,网上资料也很凌乱,偶尔自己写也会丢三落四的.所以本文也就产生了,本文不会写复杂的东西,完全以基础应用的需求来写,所以不会对Window ...

随机推荐

  1. 深入浅出OpenStack云计算平台管理(nova-compute/network)

    一.本课程是怎么样的一门课程(全面介绍)          1.1. 课程的背景           OpenStack是 一个由Rackspace发起.全球开发者共同参与的开源项目,旨在打造易于部署 ...

  2. BMP文件结构

    1. 位图文件头 位图文件头包含有关于文件类型.文件大小.存放位置等信息,在Windows 3.0以上版本的位图文件中用BITMAPFILEHEADER结构来定义: typedef struct ta ...

  3. linux-shell脚本命令之sed

    [ sed简单介绍: ] sed是一个非常好的文件处理工具, 它本身是一个管道命令, 以行为单位进行处理, 能够用于对数据行进行新增.选取.替换.删除等操作. sed命令行格式:sed [-nefri ...

  4. 几种快速傅里叶变换(FFT)的C++实现

    链接:http://blog.csdn.net/zwlforever/archive/2008/03/14/2183049.aspx一篇不错的FFT 文章,收藏一下. DFT的的正变换和反变换分别为( ...

  5. Android触控屏幕Gesture(GestureDetector和SimpleOnGestureListener的使用教程)

    1.当用户触摸屏幕的时候,会产生许多手势,例如down,up,scroll,filing等等,我们知道View类有个View.OnTouchListener内部接口,通过重写他的onTouch(Vie ...

  6. C语言中 struct成员变量顺序对内存的占用

    在C语言的结构体中,是会按照其变量类型来进行分配内存大小的.但是对于不同的编译器,结果是不同的,在VC++6.0中是怎么个分配情况呢?用一下C中的关键字sizeof()来测试下,注意sizeof()不 ...

  7. Linux系统管理员必备的监控工具(88款)

    随着互联网行业的不断发展,各种监控工具多得不可胜数.这里列出网上最全的监控工具.让你可以拥有超过80种方式来管理你的机器.在本文中,我们主要包括以下方面: 命令行工具 网络相关内容 系统相关的监控工具 ...

  8. VC/MFC ListCtrl 控件功能使用汇总(转)

    以下未经说明,listctrl默认view 风格为report 相关类及处理函数 MFC:CListCtrl类 SDK:以 “ListView_”开头的一些宏.如 ListView_InsertCol ...

  9. 设置程序版本等信息(可直接修改pro文件设置,但是更推荐使用rc文件设置)

    Qt版本:5.2.0 在.pro文件中设置版本等信息 VERSION = 1.2.3 QMAKE_TARGET_PRODUCT = 产品名称QMAKE_TARGET_COMPANY = 公司QMAKE ...

  10. oracle系统包——dbms_random用法及order by 小结(转)

    dbms_random是一个可以生成随机数值或者字符串的程序包. 这个包有initialize().seed().terminate().value().normal().random().strin ...