Windows服务:Microsoft Windows 服务(即,以前的 NT服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序。这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面。这使服务非常适合在服务器上使用,或任何时候,为了不影响在同一台计算机上工作的其他用户,需要长时间运行功能时使用。还可以在不同于登录用户的特定用户帐户或默认计算机帐户的安全上下文中运行服务。(摘自百度百科)

一:创建

二:属性

VS自动创建了一个Service1.cs的文件:

点击F4,查看各个属性的含义:

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

CanHandlePowerEvent     服务时候接受电源事件

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

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

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

ServiceName                       服务名称

三:功能

点击F7查看Service1.cs的源代码:

默认实现了OnStart和OnStop两个方法。

以向一个文本文件中写入数据操作为例:

   public partial class Service1 : ServiceBase
{
public Service1()
{
InitializeComponent();
} /// <summary>
/// 服务启动
/// http://www.cnblogs.com/babycool
/// </summary>
/// <param name="args"></param>
protected override void OnStart(string[] args)
{
string start = string.Format("{0}-{1}",DateTime.Now.ToString("yyyyMMddHHmmss"),"程序启动了。");
Log(start);
} /// <summary>
/// 服务停止
/// http://www.cnblogs.com/babycool
/// </summary>
protected override void OnStop()
{
string start = string.Format("{0}-{1}", DateTime.Now.ToString("yyyyMMddHHmmss"), "程序停止了。");
Log(start);
} /// <summary>
/// 系统关闭
/// http://www.cnblogs.com/babycool
/// </summary>
protected override void OnShutdown()
{
string start = string.Format("{0}-{1}", DateTime.Now.ToString("yyyyMMddHHmmss"), "电脑关闭了。");
Log(start);
} /*
/// <summary>
/// 服务暂停
/// http://www.cnblogs.com/babycool
/// </summary>
protected override void OnPause()
{ }
*/ /*
/// <summary>
/// 服务继续
/// </summary>
protected override void OnContinue()
{
base.OnContinue();
}
*/
/*
/// <summary>
/// 系统电源状态改变
/// </summary>
/// <param name="powerStatus"></param>
/// <returns></returns>
protected override bool OnPowerEvent(PowerBroadcastStatus powerStatus)
{
return base.OnPowerEvent(powerStatus);
}
*/ void Log(string str)
{
string path = "E://def/6.txt";
using (StreamWriter sw = File.AppendText(path))
{
sw.WriteLine(str);
}
} }

四:安装程序

切换到 Service1.cs[设计] 界面,右击选择“添加安装程序”。

这时项目中就添加了一个新类 ProjectInstaller 和两个安装组件 ServiceProcessInstaller 和 ServiceInstaller。

选中“serviceInstaller1” 控件,F4打开属性面板,

Description       服务程序的描述信息

DisplayName     服务程序显示的名称

StartType        指定如何启动服务

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

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

Disabled     服务无法启动

选中“serviceProcessInstaller1” 控件,F4打开属性面板:

将serviceProcessInstaller类的Account属性改为 LocalSystem。

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

五:生成

右击 项目 选择生成 ,不能通过F5来直接运行服务项目。

六:安装卸载服务

选择 VS组件 “Visual Studio命令提示(2010)” 工具,并以“管理员身份运行"(win7、win8系统下)。

注意:这里必须选择“以管理员身份运行”,否则会报错。

  

从命令行运行 Installutil.exe 目录  命令,以项目中的已编译可执行文件所在的目录作为参数,安装服务:

因为Installutil.exe程序默认在Windows\System32\目录下,需要通过cmd命令 "cd C:\Windows\Microsoft.NET\Framework\v4.0.30319" 切换目录。

从命令行运行 Installutil.exe /u 目录   命令来卸载服务:

安装服务:
installutil.exe E:\XTestDemo\X_15_WindowsService\bin\Debug\X_15_WindowsService.exe

卸载服务:
installutil.exe /u E:\XTestDemo\X_15_WindowsService\bin\Debug\X_15_WindowsService.exe

七:查看服务状态

在“计算机管理”中,服务 下可以看到刚刚安装的Service服务(cmd命令:services.msc---本地服务设置):

默认是停止状态。右击,选择“启动”,即可开启服务。

通过“属性”,可以查看到更详细的信息。

转载请注明出处。

相关参考:

用C#创建Windows服务(Windows Services) - Gsun - 博客园

C#开发Windows Services服务--服务安装失败的解决办法 - 无名小虾 - 博客园

C#应用服务器!包括(消息服务器,更新服务器,应用服务器)

原文链接:http://www.cnblogs.com/babycool/p/3534786.html

WindowsService服务程序开发的更多相关文章

  1. [开发笔记]-WindowsService服务程序开发

    Windows服务:Microsoft Windows 服务(即,以前的 NT服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序.这些服务可以在计算机启动时自动启动,可 ...

  2. WindowsService服务程序开发 安装和卸载

    安装服务:installutil.exe E:\XTestDemo\X_15_WindowsService\bin\Debug\X_15_WindowsService.exe 卸载服务:install ...

  3. 输出无名空数组---精android、IOS App应用服务程序开发

    直接输出 [] 示例文件_samples/app/array_null.json在轻开平台的_samples/app/文件夹下 太Easy.无法写出很多其它的内容,大家还是自己试试吧! ! ! 相关资 ...

  4. [开发笔记]-控制Windows Service服务运行

    用代码实现动态控制Service服务运行状态. 效果图: 代码: #region 启动服务 /// <summary> /// 启动服务 /// </summary> /// ...

  5. 开发WINDOWS服务程序

    开发WINDOWS服务程序 开发步骤: 1.New->Other->Service Application 2.现在一个服务程序的框架已经搭起来了,打开Service1窗口,有几个属性说明 ...

  6. Windows Service 开发,安装与调试

    Visual Studio.net 2010 Windows Service 开发,安装与调试 本示例完成一个每隔一分钟向C:\log.txt文件写入一条记录为例,讲述一个Windows Servic ...

  7. 基于Spring开发的DUBBO服务接口测试

    基于Spring开发的DUBBO服务接口测试 知识共享主要内容: 1. Dubbo相关概念和架构,以及dubbo服务程序开发步骤. 2. 基于Spring开发框架的dubbo服务接口测试相关配置. 3 ...

  8. C#判断程序是由Windows服务启动还是用户启动

    在Windows系统做网络开发,很多时候都是使用Windows服务的模式,但在调度阶段,我们更多的是使用控制台的模式.在开发程序的时候,我们在Program的Main入口进行判断.最初开始使用Envi ...

  9. Java语言与C语言之间的应用比较

    http://book.51cto.com/art/200906/131809.htm C语言能干的Java也能干的如下: 网络应用层协议服务程序开发:如WebServer.FTPServer.Mai ...

随机推荐

  1. #include <boost/asio.hpp>

    TCP服务端和客户端 TCP服务端 #include <iostream> #include <stdlib.h> #include <boost/asio.hpp> ...

  2. crm2011js操作选项卡和节点

    CRM窗口选项卡的操作 crm2011节点的操作

  3. Android_通过ContentObserver监听短信数据变化

    1.简单介绍 在小米等一些机型,无法接收系统发出的短信广播. 仅仅能通过观察者ContentObserver,去监听短信数据的变化 2.SMS数据介绍 content://sms/inbox     ...

  4. 【深搜加剪枝】【HDU1455】【Sticks】

    题目大意:有一堆木棍 由几个相同长的木棍截出来的,求那几个相同长的木棍最短能有多短? 深搜+剪枝 具体看代码 #include <cstdio> #include <cstdlib& ...

  5. CSS备忘-1

    CSS 可以通过以下方式添加到HTML中: 内联样式- 在HTML元素中使用"style" 属性 内部样式表 -在HTML文档头部 <head> 区域使用<sty ...

  6. 使用 Struts 2 实现国际化

    struts2国际化(I18N) 国际化也叫I18N,是Internationalization的简称.Struts2国际化是建立在Java国际化基础上,只是Struts2框架对Java国际化进行了进 ...

  7. Java 四种线程池的使用

    java线程线程池监控 Java通过Executors提供四种线程池,分别为: newCachedThreadPool:创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收 ...

  8. Vijos 1120 花生采摘

    和“过河”一样,在很久以前我也曾经尝试过做这道题,可无奈当时没有看清题目.题目上说要先找最大的,然后次之.当时纠结了好久,可惜没做出来.但是现在就很好做了,只需要用结构体把每一个花生植株记录下来,so ...

  9. Linux命令--链接文件的那些事

    linux 链接ln的使用 linux操作系统下ln的使用方式: ln [option] source_file dest_file #source_file是待建立链接文件的文件,dest_file ...

  10. MySQL存储过程(转载)

    转自:http://www.blogjava.net/sxyx2008/archive/2009/11/24/303497.html 1.1         CREATE  PROCEDURE  (创 ...