您的位置:首页 > 编程语言 > C#

c#创建、安装、卸载、调试windows服务的简单事例

2015-10-11 18:03 831 查看
最近工作中用到了windows服务,对其有深刻理解和丰富经验谈不上,本篇文章只是简单陈诉用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服务

打断点,在工具栏选“调试”下的“附加到进程”,附加自己的服务即可调试。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: