C# 开发Windows Service(一)——第一个windows服务开发和安装卸载
2016-09-01 14:05
549 查看
一.创建windows服务项目
打开vs2012,新建项目选择windows服务
![](https://oscdn.geek-share.com/Uploads/Images/Content/201609/2436ad93e29292cccc970f4870763906)
二.写服务程序
项目创建成功之后,打开service.cs类,在这里,我们写入一点简单的代码。
我们在服务启用和停止的时候向D盘的一个文本文件进行写入数据的操作。
其中,重写的方法OnStart内的程序为服务启动时的执行,OnStop内的程序是服务停止时执行。
回到service1.cs的设计窗口,右键添加安装程序。
将serviceProcessInstaller1的属性Account设置为LocalSystem
![](https://oscdn.geek-share.com/Uploads/Images/Content/201609/6a7d2fe941ac4f4702872bd6f1716e82)
Account属性不同值的区别见下表
![](https://oscdn.geek-share.com/Uploads/Images/Content/201609/5976a7dbcdd3346c1532c2d756c03c08)
将serviceInstaller1的ServiceName属性修改为service1,与服务类名相对应
![](https://oscdn.geek-share.com/Uploads/Images/Content/201609/10782595f526f33149b8bcee2a88fb2d)
starttype属性的区别
![](https://oscdn.geek-share.com/Uploads/Images/Content/201609/cff1c0666aaea2998e51beec3c70896c)
保存生成项目。
三.安装服务
这里先说最简单粗暴的方式。
写两个批处理程序,保存文件时的格式选择utf-8,不知道如何修改的小伙伴们推荐使用editplus。
install.bat:
其中 Net start service1为启动服务,auto为是否自动运行,这部分代码可以根据需求自行改动。
uninstall.bat:
之后,win7的用户可以考虑直接运行就ok,win10由于权限问题,直接运行可能会报错
![](https://oscdn.geek-share.com/Uploads/Images/Content/201609/f887a8e554387c4a8e8f28d7f2d86973)
按照网上看到的一些方法,将生成的WindowsService1.exe的属性改为管理员身份运行,然而也未必会有用。
这时候用最粗暴的方式,以管理员身份运行cmd,定位到bat所在位置,直接运行install.bat,应该可以安装成功,卸载同理。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201609/eaaf86b99551b1927fc3924db24fb5bc)
顺利安装成功之后我们去D盘看看我们用windows 服务创建的文件。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201609/3aa293f102cdecafce8a674d3c8a77c0)
没问题,该写的内容已经写入。卸载同理,就不用看了~
当然,我们还想看看这个服务到底还在不在运行。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201609/76aec7173aefabbcbe34313777c84514)
ok哒~第一个简单的win服务搞定
四.服务循环执行的方法
重温一下timer。
打开vs2012,新建项目选择windows服务
二.写服务程序
项目创建成功之后,打开service.cs类,在这里,我们写入一点简单的代码。
我们在服务启用和停止的时候向D盘的一个文本文件进行写入数据的操作。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.IO; using System.Linq; using System.ServiceProcess; using System.Text; using System.Threading.Tasks; namespace WindowsService1 { public partial class Service1 : ServiceBase { public Service1() { InitializeComponent(); } protected override void OnStart(string[] args) { FileStream fs = new FileStream(@"d:\windowsservice.txt", FileMode.OpenOrCreate, FileAccess.Write); StreamWriter sw = new StreamWriter(fs); sw.BaseStream.Seek(0, SeekOrigin.End); sw.WriteLine("Service Start" + DateTime.Now.ToString() + "\n"); sw.Flush(); sw.Close(); fs.Close(); } protected override void OnStop() { FileStream fs = new FileStream(@"d:\windowsservice.txt", FileMode.OpenOrCreate, FileAccess.Write); StreamWriter sw = new StreamWriter(fs); sw.BaseStream.Seek(0, SeekOrigin.End); sw.WriteLine("Service Stop" + DateTime.Now.ToString() + "\n"); sw.Flush(); sw.Close(); fs.Close(); } } }
其中,重写的方法OnStart内的程序为服务启动时的执行,OnStop内的程序是服务停止时执行。
回到service1.cs的设计窗口,右键添加安装程序。
将serviceProcessInstaller1的属性Account设置为LocalSystem
Account属性不同值的区别见下表
将serviceInstaller1的ServiceName属性修改为service1,与服务类名相对应
starttype属性的区别
保存生成项目。
三.安装服务
这里先说最简单粗暴的方式。
写两个批处理程序,保存文件时的格式选择utf-8,不知道如何修改的小伙伴们推荐使用editplus。
install.bat:
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe WindowsService1.exe Net Start Service1 sc config Service1 start= auto pause
其中 Net start service1为启动服务,auto为是否自动运行,这部分代码可以根据需求自行改动。
uninstall.bat:
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /u WindowsService1.exe
之后,win7的用户可以考虑直接运行就ok,win10由于权限问题,直接运行可能会报错
按照网上看到的一些方法,将生成的WindowsService1.exe的属性改为管理员身份运行,然而也未必会有用。
这时候用最粗暴的方式,以管理员身份运行cmd,定位到bat所在位置,直接运行install.bat,应该可以安装成功,卸载同理。
顺利安装成功之后我们去D盘看看我们用windows 服务创建的文件。
没问题,该写的内容已经写入。卸载同理,就不用看了~
当然,我们还想看看这个服务到底还在不在运行。
ok哒~第一个简单的win服务搞定
四.服务循环执行的方法
重温一下timer。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.IO; using System.Linq; using System.ServiceProcess; using System.Text; using System.Threading.Tasks; using System.Timers; namespace WindowsService1 { public partial class Service1 : ServiceBase { public Service1() { InitializeComponent(); } Timer timer; public static int num = 1; protected override void OnStart(string[] args) { timer = new Timer(); timer.Interval = 3000; timer.Elapsed += new ElapsedEventHandler(StartWrite); timer.Enabled = true; } protected override void OnStop() { this.timer.Enabled = false; FileStream fs = new FileStream(@"d:\windowsservice.txt", FileMode.OpenOrCreate, FileAccess.Write); StreamWriter sw = new StreamWriter(fs); sw.BaseStream.Seek(0, SeekOrigin.End); sw.WriteLine("Service Stop" + DateTime.Now.ToString() + "\n"); sw.Flush(); sw.Close(); fs.Close(); } public static void StartWrite(object sender, ElapsedEventArgs e) { FileStream fs = new FileStream(@"d:\windowsservice.txt", FileMode.OpenOrCreate, FileAccess.Write); StreamWriter sw = new StreamWriter(fs); sw.BaseStream.Seek(0, SeekOrigin.End); sw.WriteLine("第"+num+"次写入:" + DateTime.Now.ToString() + "\n"); num++; sw.Flush(); sw.Close(); fs.Close(); } } }
相关文章推荐
- C#制作Windows service服务系列一:制作一个可安装、可启动、可停止、可卸载的Windows service
- C#制作Windows service服务系列一:制作一个可安装、可启动、可停止、可卸载的Windows service
- C#制作Windows service服务系列一:制作一个可安装、可启动、可停止、可卸载的Windows service
- C#制作Windows service服务系列一:制作一个可安装、可启动、可停止、可卸载的Windows service
- C#制作Windows service服务系列一:制作一个可安装、可启动、可停止、可卸载的Windows service
- C#制作Windows service服务系列一:制作一个可安装、可启动、可停止、可卸载的Windows service
- C#代码安装、卸载、监控Windows服务
- C#制作Windows service服务系列一:制作一个可安装、可启动、可停止、可卸载的Windows
- C#编写windows 服务 安装及卸载
- C# Windows 服务 的简单程序的编写,安装 和 卸载
- c#开发的程序安装时动态指定windows服务名称
- C# windows服务:通过cmd命令安装、卸载、启动和停止Windows Service(InstallUtil.exe)
- C#windows service C#windows 服务安装卸载SC
- C#制作Windows service服务系列一:制作一个可安装、可启动、可停止、可卸载的Windows service(downmoon原创)
- 安装 启动 停止 卸载 Windows服务 c#
- C# windows服务安装及卸载
- c#创建、安装、卸载、调试windows服务的简单事例
- vs2005 以上开发windows 服务的安装,卸载启动,停止批处理
- C#对Windows服务操作(注册安装服务,卸载服务,启动停止服务,判断服务存在)
- C#开发Windows Services服务--服务安装失败的解决办法