c#创建、安装、卸载、调试windows服务的简单事例
一、创建windows服务
1、用VS创建windows服务,结果如下:
2、删除默认生成的Service1.cs文件,然后创建自己的服务文件(如:MyService),并修改Program.cs文件的代码,如下:
此时,解决方案的目录结构如下:
3、双击MyService.cs服务文件,在左侧设计模式中,右键,点击“添加安装程序”,自动会生成Projectinstaller.cs文件以及两个安装组件,如下:
4、右键”ServiceProcessInstaller1“,选择属性,设置Account 帐号方式,建议为LocalService,如下:
5、右键”ServiceInstaller1“,选择属性,设置属性
a)Description 服务描述,直接显示到Windows服务列表中的描述;
b)DisplayName 服务显示名称,直接显示到Windows服务列表中的名称;
c)ServiceName 服务进程名称,安装与卸载服务时的唯一标识.
如下:
6、创建安装服务批处理文件Install.bat,可以创建记事本,然后修改后缀为bat,记事本内容如下:
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe WindowsServiceDemo.exe
Net Start MyService
sc config MyService start= auto
pause
记事本另存为时设置编码为ANSI,如下图:
7、同理创建创建卸载服务批处理文件Uninstall.bat,内容如下:
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /u WindowsServiceDemo.exe
pause
此时解决方案的目录结构如下:
二、写服务代码
右键”MyService.cs“,选择查看代码,如下:
namespace WindowsServiceDemo { partial class MyService : ServiceBase { public MyService() { InitializeComponent(); } protected override void OnStart(string[] args) { // TODO: 在此处添加代码以启动服务。 } protected override void OnStop() { // TODO: 在此处添加代码以执行停止服务所需的关闭操作。 } } }
下面实现自己的简单功能,代码如下:
using System; using System.Diagnostics; using System.IO; using System.ServiceProcess; using System.Timers; namespace WindowsServiceDemo { partial class MyService : ServiceBase { private Timer time = new Timer(); public MyService() { InitializeComponent(); } protected override void OnStart(string[] args) { WriteLog("服务启动,时间:"+DateTime.Now.ToString("HH:mm:ss") + "\r\n"); time.Elapsed += new System.Timers.ElapsedEventHandler(MethodEvent); time.Interval = 2 * 1000;//时间间隔为2秒钟 time.Start(); } protected override void OnStop() { WriteLog("服务停止,时间:" + DateTime.Now.ToString("HH:mm:ss") + "\r\n"); } private void MethodEvent(object source, System.Timers.ElapsedEventArgs e) { time.Enabled = false; string result = string.Empty; string startTime = DateTime.Now.ToString("HH:mm:ss"); try { //......... result = "执行成功,时间为:"+ startTime; } catch (Exception exp) { result = "失败,原因:" + exp.Message; } finally { WriteLog(result); time.Enabled = true; } } /// <summary> /// 日志记录 /// </summary> /// <param name="logInfo"></param> public void WriteLog(string logInfo) { try { string logDirectory = AppDomain.CurrentDomain.BaseDirectory + "\\Logs"; if (!Directory.Exists(logDirectory)) { Directory.CreateDirectory(logDirectory); } string filePath = logDirectory + "\\" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt"; File.AppendAllText(filePath, logInfo); } catch { } } } }
具体功能是2秒钟执行一次,并记录日志。
三、安装windows服务
重新生成整个解决方案,成功后,从项目所在文件夹赋值bin文件到某个自定义的文件夹,并将Install.bat和Uninstall.bat复制到bin下的Debug文件夹中。
以管理员身份运行Install.bat安装服务,成功结果如下图:
这是右键“我的电脑”,选择“管理”,选择“服务”,就可以看到服务已安装,如下图:
同时,Debug文件夹里有了Logs文件,Logs文件夹里有txt文档,内容如下:
可以看到没2秒钟执行一次。
四、卸载windows服务
卸载服务,同样以管理员身份运行Uninstall.bat即可。
五、调试windows服务
打断点,在工具栏选“调试”下的“附加到进程”,附加自己的服务即可调试。