.net windows服务
适用场景
工作中遇到定时检测数据状态的问题可以使用服务
服务基本属性
属性 | 说明 |
---|---|
Manual | 服务安装后,必须手动启动 |
Automatic | 每次计算机重新启动时,服务都会自动启动 |
Disabled | 服务无法启动 |
Autolog | 是否自动写入系统的日志文件 |
CanHandlePowerEvent | 服务时候接受电源事件 |
CanPauseAndContinue | 服务是否接受暂停或继续运行的请求 |
CanShutdown | 服务是否在运行它的计算机关闭时收到通知,以便能够调用 OnShutDown 过程 |
CanStop | 服务是否接受停止运行的请求 |
ServiceName | 服务名 |
使用流程
1:建立项目,按以下流程操作
serviceProcessInstaller1 设置属性:Account ==> LocalSystem
serviceInstaller1 设置属性:StartType ==> Automatic DisplayName==> ServerTest
2:项目代码
public partial class Service1 : ServiceBase
{
//定时器
Timer timer = null;
public Service1()
{
InitializeComponent();
//启用暂停恢复 //服务默认不接受暂停
base.CanPauseAndContinue = true;
//一秒执行一次
}
//启动服务执行
protected override void OnStart(string[] args)
{
string state = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "启动";
WriteLog(state);
timer = new Timer(OnTimerHandler, null, 0, 1000);
}
//停止服务执行 会终止timer的操作
protected override void OnStop()
{
string state = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "停止";
WriteLog(state);
}
//恢复服务执行
protected override void OnContinue()
{
string state = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "继续";
WriteLog(state);
}
//暂停服务执行 并不会终止timer的操作 可以在函数内终止
protected override void OnPause()
{
string state = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "暂停";
WriteLog(state);
}
public void WriteLog(string str)
{
if (string.IsNullOrEmpty(str))
{
return;
}
FileStream fileStream = null;
StreamWriter streamWriter = null;
try
{
string path = @"D:\TEST.txt";
using (fileStream = new FileStream(path, FileMode.Append, FileAccess.Write))
{
using (streamWriter = new StreamWriter(fileStream))
{
streamWriter.WriteLine(str);
streamWriter.Flush();
if (streamWriter != null)
{
streamWriter.Close();
}
}
if (fileStream != null)
{
fileStream.Close();
}
}
}
catch { }
}
public void OnTimerHandler(object state)
{
WriteLog("OnTimerHandler:" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"));
}
}
3:服务安装
1:重新生成项目(Debug /Any Cpu模式)
2:找到InstallUtils:C:\Windows\Microsoft.NET\Framework64\v4.0.30319(默认路径)放到项目的Debug文件夹下
3:在当前文件夹下执行命令创建并开始服务
InstallUtil.exe WindowsServiceTest.exe
Net Start ServiceTest
sc config ServiceTest start= auto
4:停止服务并删除服务
InstallUtil.exe /u WindowsServiceTest.exe
sc delete ServiceTest.exe