用C#创建Windows服务(Windows Services)

Windows服务在Visual Studio 以前的版本中叫NT服务,在VS.net启用了新的名称。用Visual C# 创建Windows服务不是一件困难的事,本文就将指导你一步一步创建一个Windows服务并使用它。这个服务在启动和停止时,向一个文本文件中写入一些文字信息。

第一步:创建服务框架
要创建一个新的 Windows 服务,可以从Visual C# 工程中选取 Windows 服务(Windows Service)选项,给工程一个新文件名,然后点击 确定。

你可以看到,向导向工程文件中增加WebService1.cs类:

其中各属性的含意是:

ü         Autolog                 是否自动写入系统的日志文件

ü         CanHandlePowerEvent     服务时候接受电源事件

ü         CanPauseAndContinue          服务是否接受暂停或继续运行的请求

ü         CanShutdown 服务是否在运行它的计算机关闭时收到通知,以便能够调用 OnShutDown 过程

ü         CanStop                              服务是否接受停止运行的请求

ü         ServiceName                       服务名

第二步:向服务中增加功能
在 .cs代码文件中我们可以看到,有两个被忽略的函数 OnStart和OnStop。

OnStart函数在启动服务时执行,OnStop函数在停止服务时执行。在这里,当启动和停止服务时,向一个文本文件中写入一些文字信息,代码如下:

protected override void OnStart(string[] args)

{

FileStream fs = new FileStream(@"d:\mcWindowsService.txt" , FileMode.OpenOrCreate, FileAccess.Write);

StreamWriter m_streamWriter = new StreamWriter(fs);

m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);

m_streamWriter.WriteLine("mcWindowsService:         Service Started"+DateTime.Now.ToString()+"\n");

m_streamWriter.Flush();

m_streamWriter.Close();

fs.Close();

}

protected override void OnStop()

{

FileStream fs = new FileStream(@"d:\mcWindowsService.txt" , FileMode.OpenOrCreate, FileAccess.Write);

StreamWriter m_streamWriter = new StreamWriter(fs);

m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);

m_streamWriter.WriteLine(" mcWindowsService: Service Stopped "+DateTime.Now.ToString()+"\n");

m_streamWriter.Flush();

m_streamWriter.Close();

fs.Close();

}

第三步: 将安装程序添加到服务应用程序

Visual Studio.NET 随附有安装组件,可用来安装与服务应用程序相关联的资源。安装组件在正在安装到的系统上注册一项单个的服务,并使服务控制管理器知道该服务的存在。

要正确安装服务,并不需要在安装程序中进行任何特殊编码。但是,如果需要向安装进程添加特殊功能,则可能偶尔需要修改安装程序的内容。

将安装程序添加到服务应用程序的步骤是:

1:在解决方案中,访问要向其中添加安装组件的服务的Design视图。

2:在属性窗口中,单击添加安装程序链接

这时项目中就添加了一个新类 ProjectInstaller 和两个安装组件 ServiceProcessInstaller 和 ServiceInstaller,并且服务的属性值被复制到组件。

3:若要确定如何启动服务,请单击 ServiceInstaller 组件并将 StartType 属性设置为适当的值。

ü         Manual      服务安装后,必须手动启动。

ü         Automatic    每次计算机重新启动时,服务都会自动启动。

ü         Disabled     服务无法启动。

4:将serviceProcessInstaller类的Account属性改为 LocalSystem

这样,不论是以哪个用户登录的系统,服务总会启动。

第四步:生成服务程序

通过从生成菜单中选择生成来生成项目。

注意   不要通过按 F5 键来运行项目——不能以这种方式运行服务项目。

第五步:安装服务

访问项目中的已编译可执行文件所在的目录。
用项目的输出作为参数,从命令行运行 InstallUtil.exe。在命令行中输入下列代码:
installutil yourproject.exe
卸载服务

用项目的输出作为参数,从命令行运行 InstallUtil.exe。

installutil /u yourproject.exe

http://www.cnblogs.com/laiwen/archive/2005/08/21/219590.html

打包:

为服务创建安装项目

在“文件”菜单上指向“添加项目”,然后选择“新建项目”。
在“项目类型”窗格中选择“安装和部署项目”文件夹。
在“模板”窗格中选择“安装项目”。将项目命名为 MyServiceSetup。
安装项目随即添加到解决方案。

然后,将 Windows 服务项目的输出 MyNewService.exe 添加到安装项目中。

向安装项目添加 MyNewService.exe

在解决方案资源管理器中,右击“MyServiceSetup”,指向“添加”,然后选择“项目输出”。
出现“添加项目输出组”对话框。

在“项目”框中选择“MyNewService”。
在列表框中,选择“主输出”,然后单击“确定”。
MyNewService 的主输出的项目项被添加到安装项目中。现在添加自定义操作以安装 MyNewService.exe 文件。

向安装项目添加自定义操作

在解决方案资源管理器中右击安装项目,指向“视图”,然后选择“自定义操作”。
出现自定义操作编辑器。

在“自定义操作”编辑器中右击“自定义操作”节点,然后选择“添加自定义操作”。
出现“选择项目中的项”对话框。

在列表框中双击“应用程序文件夹”将其打开,选择“主输出来自 MyNewService(活动)”,然后单击“确定”。
主输出被添加到自定义操作的所有四个节点,即“安装”、“提交”、“回滚”和“卸载”。

在解决方案资源管理器中,右击 MyServiceSetup 项目并选择“生成”。
安装 Windows 服务

若要安装 MyEventLog.exe,请右击解决方案资源管理器中的安装项目,并选择“安装”。
启动和停止服务

通过执行下列操作之一打开服务控制管理器:
在 Windows 2000 Professional 中,在桌面上右击“我的电脑”,然后单击“管理”。在“计算机管理”控制台中,展开“服务和应用程序”节点。
- 或 -

在 Windows 2000 Server 中,单击“开始”,指向“程序”,单击“管理工具”,然后单击“服务”。
注意 在 Windows NT 4.0 版中,可以从控制面板中打开该对话框。
现在应该看到 MyNewService 列在窗口的“服务”区域中。

从列表中选择您的服务,右击该服务,然后单击“启动”。
右击该服务,然后单击“停止”。
验证服务的事件日志输出

打开服务器资源管理器并访问“事件日志”节点。有关更多信息,请参见在服务器资源管理器中处理事件日志。
注意 服务器资源管理器的“服务器”节点在 Visual Basic 和 Visual C# .NET 的标准版中不可用。有关更多信息,请参见 Visual Basic 标准版功能或 Visual C# 标准版的功能。
找到 MyNewLog 的列表并展开它。您应该看到服务所执行操作的项。
卸载服务

在“开始”菜单上,打开“控制面板”并单击“添加或删除程序”,然后找到您的服务并单击“删除”。
还可以通过右击 .msi 文件的程序图标并选择“卸载”来卸载该程序。
注意 如果是在 Windows 2000 上安装了服务,则必须重新启动系统后才能重新安装服务。在 Windows 2000 中,服务在系统重新启动之前不会完全删除。

转载于:https://blog.51cto.com/cnming/422702

用C#创建Windows服务(Windows Services)并打包!相关推荐

  1. 用C#创建Windows服务(Windows Services)

    转载自 hyslove 最终编辑 hyslove Windows服务在Visual Studio 以前的版本中叫NT服务,在VS.net启用了新的名称.用Visual C# 创建Windows服务不是 ...

  2. C# windows服务:创建Windows服务(Windows Services)的一般步骤

    C#创建Windows服务(Windows Services) Windows服务在Visual Studio 以前的版本中叫NT服务,在VS.net启用了新的名称.用Visual C# 创建Wind ...

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

    转自:http://www.cnblogs.com/aierong/archive/2012/05/28/2521409.html 最近由于工作需要,写了一些windows服务程序,有一些经验,我现在 ...

  4. *用C#创建Windows服务(Windows Services)

    Windows服务在Visual Studio 以前的版本中叫NT服务,在VS.net启用了新的名称.用Visual C# 创建Windows服务不是一件困难的事,本文就将指导你一步一步创建一个Win ...

  5. fileservice 类代码放哪里_一步步开发Windows服务(Windows Service)[转]

    基于0起步来创建一个服务,做到简单的记录时间日志功能,其具体招行方法可自行添加. 1.创建服务 2.删除默认服务文件 3.添加自己的服务文件 4.更改启动项目 5. 引用 using System.T ...

  6. 用.NET创建Windows服务

    用.NET创建Windows服务 译者说明:我是通过翻译来学习C#的,文中涉及到的有Visual Studio.NET有关操作,我都根据中文版的VS.NET显示信息来处理的,可以让大家不致有误解. 作 ...

  7. 利用vs.net快速开发windows服务(总结)

    引用 http://www.cnblogs.com/lovecherry/archive/2005/03/25/125527.html 在很多应用中需要做windows服务来操作数据库等操作,比如 ( ...

  8. 《Windows核心编程》---Windows服务

    Windows服务(Services),是一些运行在WindowsNT.Windows2000和Windows XP等操作系统下用户环境以外的程序.它不同于一般的可执行程序,不需要系统登录便可以运行, ...

  9. windows服务编程

    文章目录 前言 方案一:服务程序 方案二:后台程序 对比 windows服务编程 windows服务控制 附录 - 完整代码 前言 在linux中,如果需要一个程序在后台持续提供服务,我们一般会使用守 ...

  10. 如何把计算机管理的服务删掉,如何删除windows服务

    一.什么是Windows服务 Windows服务也称为Windows Service,它是Windows操作系统和Windows网络的基础,属于系统核心的一部分,它支持着整个Windows的各种操作. ...

最新文章

  1. 记录篇,自己在项目中使用过的。
  2. 第 5 章 Nova - 041 - Resize Instance 操作详解
  3. android 渠道包 占位符配置,Android打包
  4. 关于Activity onNewIntent方法的调用时机
  5. Angular7教程-06-页面与数据交互
  6. 【mysql解决方案】ERROR 1248 (42000): Every derived table must have its own alias
  7. [Xcode 实际操作]七、文件与数据-(3)创建文本文件、属性列表文件、图片文件
  8. Centos7安装Python3.7
  9. 康托尔定理是如何证明的?
  10. shutdown,halt,reboot,init
  11. java 2分代复制垃圾回收_Java对象的后事处理——垃圾回收(二)
  12. dubbo配置参考手册
  13. 关于Hystrix的几个问题
  14. html手机端富文本,pc端富文本编辑的字符串在手机端适配
  15. thinkphp-查询某一列的值column
  16. springmvc源码-参数解析
  17. python根据url链接下载文件
  18. Java 读取shp文件,生成shp文件,通过shp文件自动建库
  19. myeclipse中tomcat热部署设置
  20. 安卓 魔窗SDK 快速接入

热门文章

  1. 实习成长之路:MySQL十三: count(*)这么慢,我该怎么办?为什么那么慢?
  2. for(;;)和while(true)的区别
  3. C++命名空间和缺省参数的概念
  4. 认认真真推荐10个牛逼公号!
  5. c# 对象json互相转换_能够将Excel 数据转换成Json格式的实用工具 excel2json
  6. switch里面变量吗c语言,讨教一下关于switch语句中变量定义的相关问题
  7. java切割文件出现1k_java实现把一个大文件切割成N个固定大小的文件
  8. 通信维修专用电源_万可PRO 2电源 | 开拓性通信功能,自信迈入数字化时代
  9. 服务器创建新文件夹权限设置密码,在服务器上修改文件夹权限设置密码
  10. oracle get wkt,Bing Maps开发扩展:Oracle Spatial的空间数据渲染