C# windows服务制作(包括安装及卸载)

时间:2022-12-28 19:15:52

开篇语

因工作内容需要做一个windows服务,此前并没有相关经验,所以做了一个demo来跑跑这个梗(高手跳过,需要的来踩)~

效果如下:打开服务,可以找到我们新增的一个windows服务,这个demo是定时向一个txt文件输出一句话

C# windows服务制作(包括安装及卸载)

生成的以日期命名的txt文件

C# windows服务制作(包括安装及卸载)

打开文件结果如下:

C# windows服务制作(包括安装及卸载)

全过程梳理

本文将只粗略简单的介绍一下windows服务是如何开发和安装的

一、创建windows服务
如图新建一个Windows服务

C# windows服务制作(包括安装及卸载)

进入程序如图

C# windows服务制作(包括安装及卸载)

C# windows服务制作(包括安装及卸载)

空白服务如下

 public partial class Service1 : ServiceBase
{
System.Threading.Timer recordTimer; public Service1()
{
InitializeComponent();
} protected override void OnStart(string[] args)
{
} protected override void OnStop()
{
}
}

只要在OnStart里完成你的功能代码即可。本例中我们做一个定时向本地文件写记录的功能。

创建一个类,用户写文件

  /// <summary>
/// 保存至本地文件
/// </summary>
/// <param name="ETMID"></param>
/// <param name="content"></param>
public static void SaveRecord(string content)
{
if (string.IsNullOrEmpty(content))
{
return;
}
FileStream fileStream = null;
StreamWriter streamWriter = null;
try
{
string path = Path.Combine(System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase, string.Format("{0:yyyyMMdd}", DateTime.Now)); using (fileStream = new FileStream(path, FileMode.Append, FileAccess.Write))
{
using (streamWriter = new StreamWriter(fileStream))
{
streamWriter.Write(content); if (streamWriter != null)
{
streamWriter.Close();
}
} if (fileStream != null)
{
fileStream.Close();
}
}
}
catch { }
}

如图那么在Service1中调用

 public partial class Service1 : ServiceBase
{
System.Threading.Timer recordTimer;
public Service1()
{
InitializeComponent();
} protected override void OnStart(string[] args)
{
IntialSaveRecord();
}
/// <summary>
/// 定时检查,并执行方法
/// </summary>
/// <param name="source"></param>
/// <param name="e"></param>
private void IntialSaveRecord()
{
TimerCallback timerCallback = new TimerCallback(CallbackTask); AutoResetEvent autoEvent = new AutoResetEvent(false);
recordTimer = new System.Threading.Timer(timerCallback, autoEvent, , );//其中参数10000表示延时执行服务的时间间隔,毫秒为单位
}
//方法
private void CallbackTask(Object stateInfo)
{
Show_Java.SaveRecord(string.Format(@"当前记录时间:{0},状况:程序运行正常!", DateTime.Now));
} protected override void OnStop()
{
if (recordTimer != null)
{
recordTimer.Dispose();
}
}
}

安装程序

这样服务算是写的差不多了,下面添加一个安装程序,用于安装服务。

如图,在service1页面空白处右键-添加安装程序

C# windows服务制作(包括安装及卸载)

添加一个安装程序,如图,添加完成后

C# windows服务制作(包括安装及卸载)

设置相应的属性,给serviceInstaller1设置属性,主要是描述信息。如图,

C# windows服务制作(包括安装及卸载)

给serviceProcessInstaller1设置,主要是account。一般选localsystem,如图

C# windows服务制作(包括安装及卸载)

这样服务已经写好了。那么如何添加到windows服务里面去呢。这里推荐一种简单实用的方法(也可以通过代码来安装,这里就不做过多讲解了)

安装服务

上面写好的服务,最终生成的是一个exe文件。如图,

C# windows服务制作(包括安装及卸载)

安装程序安装时需要用到这个exe的路径,所以方便起见,将这个生成的exe文件拷贝至安装程序的运行目录下。(这里我将exe拷贝到D盘shows文件夹下面)

C# windows服务制作(包括安装及卸载)

用管理员权限打开cmd窗口

C# windows服务制作(包括安装及卸载)

然后分别执行

@SET FrameworkDir=%WINDIR%\Microsoft.NET\Framework
@SET FrameworkVersion=v2.0.50727
@SET PATH=%FrameworkDir%\%FrameworkVersion%;%WINDIR%\System32;%PATH%;
InstallUtil.exe D:\路径\程序名称.exe        //安装服务
InstallUtil.exe /u D:\路径\程序名称.exe    //卸载服务(程序安装好了,如果想要修改,需要先卸载该服务,再次执行安装)

C# windows服务制作(包括安装及卸载)

运行后若无错误,效果应该如下

C# windows服务制作(包括安装及卸载)

运行完后在服务中查看,如图:

C# windows服务制作(包括安装及卸载)

再在安装目录下看记录的文件(因为我们设置项目的时候选的是手动,此时要记住启动该服务,程序才会定时执行)

C# windows服务制作(包括安装及卸载)

C# windows服务制作(包括安装及卸载)

这样,一个windows服务算是安装成功了。(方法多种多样,希望各位多提宝贵意见,不胜感激~)