【发布时间】:2018-12-15 00:43:38
【问题描述】:
我有最简单的 Windows 服务。
我需要服务才能在本地系统帐户下运行。
如果我从 SCM 启动/停止服务,一切正常,我的日志文本文件同时包含启动和停止事件,并且启动和停止事件都会自动显示在事件查看器中。
但是当我重新启动或关闭我的电脑时(在 Win 7 和 Win 10 上尝试过),如果服务以 身份运行,则永远不会调用 OnStop() 方法本地系统帐户。如果我将帐户更改为网络服务或任何其他本地/域帐户,则在重新启动/关闭 PC 之前调用 OnStop() 方法。
Windows 服务代码:
using System.IO;
using System.ServiceProcess;
namespace SimplestService
{
class MyService : ServiceBase
{
private string path = "<pathtologfile>\\MyServiceLog.txt";
public MyService()
{
this.ServiceName = "MyService";
this.CanShutdown = true;
}
protected override void OnStart(string[] args)
{
using (StreamWriter sw = File.AppendText(path))
{
sw.WriteLine("MyService Started.");
}
}
protected override void OnStop()
{
using (StreamWriter sw = File.AppendText(path))
{
sw.WriteLine("MyService Stopped.");
}
}
protected override void OnShutdown()
{
OnStop();
}
}
}
和主要条目:
using System.ServiceProcess;
namespace SimplestService
{
class Program
{
static void Main(string[] args)
{
ServiceBase.Run(new MyService());
}
}
}
为简单起见,我使用 SC 实用程序创建服务,尽管我尝试使用安装程序,甚至设置项目 (msi),但结果相同。
sc create MyService binPath= "<pathtoexe>\SimplestService.exe"
type= own start= auto DisplayName= Myservice
【问题讨论】:
标签: c#