C#实现Windows服务

资源:Walkthrough: Creating a Windows Service Application in the Component Designer: https://msdn.microsoft.com/en-us/library/zt39148a(v=vs.110).aspx

  1. 注意事项

    1. 调试服务:先启动服务,然后Attach到服务进程。
    2. 需要添加安装模块,这样可以安装Windows服务。使用InstallUtil.exe安装。
    3. 服务运行在different window station,不是interactive的,如果服务弹出对话框,用户是看不见的,这时候可能中断服务,使服务失去响应。
  2. 安装服务。
    1. 命令。InstallUtil /i MyService.exe安装服务。InstallUtil /u MyService.exe卸载服务。
    2. 编程。ManagedInstallerClass

if (args[0] == "-i")

{

ManagedInstallerClass.InstallHelper(new[] { Assembly.GetExecutingAssembly().Location });

}

else if (args[0] == "-u")

{

ManagedInstallerClass.InstallHelper(new[] { "/u", Assembly.GetExecutingAssembly().Location });

}

  1. 控制服务状态:

    1. 命令。使用sc start ServiceName启动服务,sc stop ServiceName停止服务,sc query ServiceName查询服务状态。Sc delete ServiceName删除服务。
    2. 编程。System.ServiceProcess.ServiceController。 https://msdn.microsoft.com/en-us/library/system.serviceprocess.servicecontroller(v=vs.110).aspx
    3. 服务管理界面。

  1. 创建服务。

    1. 如果创建新项目,可以使用Windows服务模板。

  1. 如果是现有项目,往项目中添加Windows服务模块。

  1. 在Main中调用ServiceBase.Run把服务跑起来。

ServiceBase[] ServicesToRun;

ServicesToRun = new ServiceBase[]

{

new Service1()

};

ServiceBase.Run(ServicesToRun);

  1. 在OnStart和OnStop中启动和清理工作线程。注意不要在OnStart中提供服务(比如while循环),否则服务一直会是正在启动状态,后面也就没有办法停止服务了。

protected override void OnStart(string[] args)

{

//启动后台线程,提供服务

}

  1. 在控制台测试。为了测试,我们可能在控制台跑服务。

private static void Main(string[] args)

{

if (Environment.UserInteractive)

{

var service = new Service1();

service.TestService(args);

}

else

{

ServiceBase[] ServicesToRun;

ServicesToRun = new ServiceBase[] { new Service1() };

ServiceBase.Run(ServicesToRun);

}

}

///Service1

public void TestService(string[] args)

{

this.OnStart(args);

Console.ReadLine();

this.OnStop();

}

注意程序的编译输出类型。

  1. 添加安装模块。在Service的设计界面上右键,选择添加安装程序。

设置添加的Installer中的控件属性,包括服务运行的账号,服务名等。

  1. 设置服务状态。如果服务启动时间很长,可以在代码里面设置服务显示的状态。

public enum ServiceState

{

SERVICE_STOPPED = 0x00000001,

SERVICE_START_PENDING = 0x00000002,

SERVICE_STOP_PENDING = 0x00000003,

SERVICE_RUNNING = 0x00000004,

SERVICE_CONTINUE_PENDING = 0x00000005,

SERVICE_PAUSE_PENDING = 0x00000006,

SERVICE_PAUSED = 0x00000007,

}

[StructLayout(LayoutKind.Sequential)]

public struct ServiceStatus

{

public long dwServiceType;

public ServiceState dwCurrentState;

public long dwControlsAccepted;

public long dwWin32ExitCode;

public long dwServiceSpecificExitCode;

public long dwCheckPoint;

public long dwWaitHint;

};

//在服务中导入方法

[DllImport("advapi32.dll", SetLastError = true)]

private static extern bool SetServiceStatus(IntPtr handle, ref ServiceStatus serviceStatus);

//使用方法。

ServiceStatus status = new ServiceStatus();

status.dwCurrentState = ServiceState.SERVICE_START_PENDING;

SetServiceStatus(this.ServiceHandle, ref status);

时间: 2024-11-10 07:11:17

C#实现Windows服务的相关文章

C# 远程服务器 安装、卸载 Windows 服务,读取远程注册表,关闭杀掉远程进程

这里安装windows服务我们用sc命令,这里需要远程服务器IP,服务名称.显示名称.描述以及执行文件,安装后需要验证服务是否安装成功,验证方法可以直接调用ServiceController来查询服务,也可以通过远程注册表来查找服务的执行文件:那么卸载文件我们也就用SC命令了,卸载后需要检测是否卸载成功,修改显示名称和描述也用sc命令.至于停止和启动Windows服务我们可以用sc命令也可以用ServiceController的API,当停止失败的时候我们会强制杀掉远程进程,在卸载windows

(转)为C# Windows服务添加安装程序

本文转载自:http://kamiff.iteye.com/blog/507129 最近一直在搞Windows服务,也有了不少经验,感觉权限方面确定比一般程序要受限很多,但方便性也很多.像后台运行不阻塞系统,不用用户登录之类.哈 哈,扯远了,今天讲一下那个怎么给Windows服务做个安装包.为什么做安装包?当然是方便了,不用每次调用InstallUtil,还有,就是看上去 正规些. 不多说了,先来看看怎么做吧.首先,当然是创建一个Windows服务的项目.这个大家应该都知道怎么做(这都不明白的留

c# windows 服务学习

用C#做windows服务变得简单对了===按照下面步骤来就行了用C#创建Windows服务(Windows Services)例子服务功能:这个服务在启动和停止时,向一个文本文件中写入一些文字信息. 第一步:创建服务框架 要创建一个新的 Windows 服务,可以从Visual C# 工程中选取 Windows 服务(Windows Service)选项,给工程一个新文件名,然后点击 确定.你可以看到,向导向工程文件中增加WebService1.cs类:其中各属性的含意是: Autolog 是

c#创建windows服务

最近做了个windows端的小工具,监测指定文件夹的内容并将新增文件保存到数据库,一开始利用的是windows自带的计划任务去做,现在想改成windows服务. 然后找了篇文章照着弄了下: http://www.cnblogs.com/knowledgesea/p/3616127.html 碰到以下问题: 1.安装服务时提示设置服务登录,需要输入用户名和密码 serviceProcessInstaller类的Account属性默认是User,改为LocalSystem,就不需要输入了. 几种账户

Windows 服务

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

topshelf包装redis为windows服务

topshelf包装redis为windows服务 Redis服务端目前用的是控制台程序运行,部署的时候能作为windows服务后台运行感觉更好.找到一篇文章Running Redis as a Windows Service,利用windows installer实现的.如果使用topshelf,岂不是可以兼容mono,于是自己动手写了,实现很简单,代码已发布到github上 redis-topshelf. 如何使用? 1.打卡配置文件,配置文件描述如下: redis.service.name

利用Python脚本管理Windows服务

Windows服务常用的功能就是启动服务,关闭服务,重启服务和查询服务运行状态,其中查询服务运行状态是其他三种操作的基础. 本文中提到的使用Python脚本管理Windows服务实际上是调用win32serviceutil模块,此模块来自pywin32包,此模块本身有管理服务的功能,有兴趣的可以去阅读它的部分源码. 本脚本存在的目的是为了熟练Python的语法和基本操作,Windows下有更好的命令行工具来管理服务,如sc.Powershell等.通常命令行工具的执行速度要比services.m

(25)c# windows服务

转自 http://www.cnblogs.com/knowledgesea/p/3616127.html Windows服务介绍 Microsoft Windows 服务能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序.这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面.这使服务非常适合在服务器上使用,或任何时候,为了不影响在同一台计算机上工作的其他用户,需要长时间运行功能时使用.还可以在不同于登录用户的特定用户帐户或默认计算机帐户的安全上下文

《C#高级编程》读书笔记(十九):Windows服务

1,Windows 服务 Windows 服务是可以在系统启动时自动打开的程序.如果需要在没有用户交互操作情况下运行程序,或者在权限比交互式用户更大的用户下运行程序,就可以创建 Windows 服务. 2,Windows 服务的体系架构 操作 Windows 服务需要3种程序: • 服务程序 • 服务控制程序 • 服务配置程序 服务程序本身用于提供需要的实际功能. 服务控制程序可以把控制请求发送给服务,如开始.停止.暂停和继续. 使用服务配置程序可以安装服务,也可以在以后改变服务的配置. 3,服

使用Topshelf快速搭建Windows服务

创建一个windows服务用于同步SqlServer数据到Elasticsearch 新建elasticsearch索引 PUT:http://localhost:9200/index_singer/ { "settings": { "number_of_shards": 5, "number_of_replicas": 1 }, "mappings": { "singer_index": { "