c#创建windows服务入门教程实例
用c#中创建一个windows服务非常简单,与windows服务相关的类都在System.ServiceProcess命名空间下。
每个服务都需要继承自ServiceBase类,并重写相应的启动、暂停、停止等方法。
windows服务的相关信息是存放与注册表中的,所以他可以在不需要用户登录的情况下自动运行,在c#中你不需要再直接向注册表中添加信息了,c#提供了服务安装类 ServiceProcessInstaller和ServiceInstaller来实现服务的安装。
首先,用vs创建一个windows服务项目
成功后你可以看到
Program中只包含服务运行的相关信息
/// <summary>
/// 应用程序的主入口点。
/// </summary>
static void Main()
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new Service1()//这里是一个数组,意味着我们可以在一个服务进程中创建多个服务实例,只需要在这里加上即可
};
ServiceBase.Run(ServicesToRun);
}
Service1.cs就是我们需要的服务类,与windows服务相关的基本操作大都可以在这里找到,如:Start,Stop,Pause,Continue等,我们要做的就是根据这些操作做不同的处理就可以了。
我们先在服务Start和Stop时分别记录一条信息到D盘
protected override void OnStart(string[] args)
{
File.AppendAllText("d:" + this.GetType().Name + ".txt", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss 服务启动"));
}
protected override void OnStop()
{
File.AppendAllText("d:" + this.GetType().Name + ".txt", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss 服务停止"));
}
一个简单的服务就完成了,下一步添加安装信息
双击项目中的Service.cs转到服务设计界面,在空白处右键选择“添加安装程序”
vs会自动创建一个默认名称为ProjectInstaller.cs的文件并转到相应的设计界面
默认添加两个类 serviceProcessInstaller1和serviceInstaller1,第一个主要用来设置服务所属账户,关系到服务的运行,第二个是服务信息描述,如:服务名、是否自动启动等
右键serviceProcessInstaller1属性,将Account属性选择为LocalSystem
右键serviceInstaller1属性,将StartType属性设为Automatic(自动启动),Description为“我的第一个windows服务”
全部保存后生成,找到生成的程序。
由于windows服务不能通过双击直接运行,所以我们需要借助.net提供的InstallUtil.exe来安装服务。
按回车开始安装,成功后会提示 “提交”阶段已成功完成,如果失败则是“回滚”阶段已成功完成
打开windows服务管理器就能看到我们安装的服务,默认服务安装成功后不会立刻启动,需要我们手动启动
如果不出意外,会显示已启动
到D盘目录下找到Service1.txt,打开会看到我们填入的信息,说明我们做的windows服务已经成功了。
要卸载windows服务可以用InstallUtil.exe /u WindowsService1.exe来卸载或通过系统命令 sc delete 服务名来卸载。
相关文章
- 【原创】开源Math.NET基础数学类库使用(16)C#计算矩阵秩
- 你用过这种奇葩的C#注释吗?如何看待
- C#, CLR, and .NET Framework versions
- C#实现控制Windows系统关机、重启和注销的方法
- C# Index 定义索---引具体使用
- C#多线程ApartmentState.STA
- C# http Get/POST请求封装类
- C#中list比数组效率低多少
- Redis for Windows(C#缓存)配置文件详解
- C#开发可以可视化操作的windows服务
- C#实战Microsoft Messaging Queue(MSMQ)消息队列(干货)
- 笨笨图片批量抓取下载 V0.2 beta[C# | WinForm | 正则表达式 | HttpWebRequest | Async异步编程]
- MFC Windows 程序设计[二十四]之windows目录展示(附源码)
- OCR - 微软windows 11系统自带的Windows OCR功能初体验
- C# Json反序列化 数据协定类型 无法反序列化 因为未找到必需的数据成员
- C# SQLite数据库 访问封装类
- C#中的DataSet、string、DataTable 、对象转换成Json
- AE 遍历栅格实现栅格重分类(C#实现)
- C#中如何截取Windows消息来触发自定义事件
- Atitit. c# 语法新特性 c#2.0 3.0 4.0 4.5 5.0 6.0 attilax总结 1. 版本历史1 1.1. C# 1.0-纯粹的面向对象2 1.2. C# 2.0
- C#使用linq查询大数据集的方法
- windows server 2008 安装Microsoft ActiveSync 6.1提示缺少一个Windows Mobile设备中心所须要的Windows组件
- C#操作Windows服务类
- (八十四)c#Winform自定义控件-导航菜单(Ribbon菜单)-HZHControls
- C#获取起始位置以及添加全局资源字典
- C# 调用Windows API实现两个进程间的通信
- C#协作试取消线程
- [C#]c#中数据的同步加锁机制 的几种方法
- Foxit PDF SDK for Windows【C#】8.4.0-cRACK
- C#创建Windows窗体应用程序实例7【鼠标事件】
- C#创建Windows窗体应用程序实例10【目录管理】
- C#创建Windows窗体应用程序实例11【文件管理】
- C#窗体编程(windows forms)禁止窗口最大化,拖拽,鼠标修改窗体大小,无边框的方法
- C#调用Windows API实现自定义打印纸张大小