C# 创建 windows服务(转)

在一个应用程序中创建多个 windows 服务的方法和 1083 错误的解决方法法

添加‘服务安装成功’后自启动功能

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

-----------------------------------------------------------------------------------------

添加服务安装成功后自启动功能

1.打开 ProjectInstaller.cs 视图设计器,选中  serviceInstaller1 组件

2.打开 serviceInstaller1 组件的事件窗口,双击 AfterInstall 事件

3.在 serviceInstaller1_AfterInstall 事件方法下添加如下代码

System.ServiceProcess.ServiceController sc = new System.ServiceProcess.ServiceController();
      sc.ServiceName = "ExpressDispatchingTrack"; //必须与 ProjectInstaller.cs 视图设计器中的 serviceInstaller1 组件的 ServiceName 属性
一致
      sc.Start();

原文地址:http://write.blog.csdn.net/postedit/7542654

时间: 2024-10-18 04:59:57

C# 创建 windows服务(转)的相关文章

Topshelf创建Windows服务

使用Topshelf创建Windows服务 概述 Topshelf是创建Windows服务的另一种方法,老外的一篇文章Create a .NET Windows Service in 5 steps with Topshelf通过5个步骤详细的介绍使用使用Topshelf创建Windows 服务.Topshelf是一个开源的跨平台的宿主服务框架,支持Windows和Mono,只需要几行代码就可以构建一个很方便使用的服务宿主. 引用安装 1.官网:http://topshelf-project.c

使用Topshelf 5步创建Windows 服务 z

使用Topshelf创建Windows 服务简要的介绍了创建Windows服务的另一种方法,老外的一篇文章Create a .NET Windows Service in 5 steps with Topshelf通过5个步骤详细的介绍使用使用Topshelf创建Windows 服务.Topshelf是一个开源的跨平台的宿主服务框架,支持Windows和Mono,只需要几行代码就可以构建一个很方便使用的服务宿主. 1.Topshelf的代码托管在http://topshelf-project.c

(转)创建Windows服务(Windows Services)N种方式总结

转自:http://www.cnblogs.com/aierong/archive/2012/05/28/2521409.html 最近由于工作需要,写了一些windows服务程序,有一些经验,我现在总结写出来.目前我知道的创建创建Windows服务有3种方式:a.利用.net框架类ServiceBaseb.利用组件Topshelfc.利用小工具instsrv和srvany 下面我利用这3种方式,分别做一个windows服务程序,程序功能就是每隔5秒往程序目录下记录日志: a.利用.net框架类

.Net创建windows服务入门

本文主要记录学习.net 如何创建windows服务. 1.创建一个Windows服务程序 2.新建安装程序 3.修改service文件 代码如下 protected override void OnStart(string[] args) { using (System.IO.StreamWriter sw = new System.IO.StreamWriter("C:\\log.txt", true)) { sw.WriteLine(DateTime.Now.ToString(&

在64位windows下使用instsrv.exe和srvany.exe创建windows服务

在64位windows下使用instsrv.exe和srvany.exe创建windows服务 在32位的windows下,包括windows7,windows xp以及windows 2003,都可以使用instsrv.exe和srvany.exe来创建自定义的windows服务.比如,我们有一个bat文件,用于将指定的程序作为服务进行启动,使用一般的工具都不可以进行此类工作,而使用由windows 2003的资源工具包windows toolkit中所带的instsrv就可以. 详细的用法这

创建Windows服务简单流程

1.首先打开VS2010(或者其他版本),创建Windows服务项目 2.创建完成后切换到代码视图,代码中默认有OnStart和OnStop方法执行服务开启和服务停止执行的操作,下面代码是详细解释: 注意选择的是系统时间,不是winform中的时间. using System; using System.IO; usingSystem.ServiceProcess; using System.Text; usingSystem.Timers; namespaceTestService { pub

使用Topshelf创建Windows 服务

本文转载:http://www.cnblogs.com/aierong/archive/2012/05/28/2521409.html b.利用组件Topshelf 本方式特点:代码简单,开源组件,Windows服务可运行多个实例 Topshelf是一个开源的跨平台的服务框架,支持Windows和Mono,只需要几行代码就可以构建一个很方便使用的服务. 官方网站:http://topshelf-project.com 第1步:引用程序集TopShelf.dll和log4net.dll 第2步:创

C#创建windows服务搭配定时器Timer使用实例(用代码做,截图版)

功能说明:C#创建一个windows服务,服务启动时D:\mcWindowsService.txt写入数据,服务运行期间每隔两秒写入当前时间.      原理这些就不说了,三语两语说不清楚,直接贴一个实例.不能贴图片!!那个压缩文里面是word文档!!有图有真相 1.建立空白项目 2.添加创建windows服务需要的引用,选择System.ServiceProcess.   3.创建服务类,继承ServiceBase,类的源代码在后面. 4. 添加windows服务的安装类. (1)在类名或者解

C#创建Windows服务与安装-图解

1.创建windows服务项目 2.右键点击Service1.cs,查看代码, 用于编写操作逻辑代码 3.代码中OnStart用于执行服务事件 public partial class Service1 : ServiceBase { string logFilePath = ""; LogHelper logHelper; WendyWuBll bll = new WendyWuBll(); public Service1() { logFilePath = Configuratio

PowerShell创建Windows服务

旧服务器要淘汰,上面的自定义的Windows服务要迁移: 一.创建服务 (1)将自定义的Windows服务所需要的文件复制到新服务器上: (2)使用powershell在新服务器上创建新的Windows服务,命令如下: new-service –Name OrderService –DisplayName OrderService –BinaryPathName "D:\order\OrderService.exe" –StartupType Automatic (3)检查创建成功: