从 services.msc 开始我的服务时,Topshelf 有不同的行为
Topshelf have different behavior when a start my service from services.msc
我已经使用 TopShelf 和 Log4net 创建了一个监视器 windows 服务进行日志记录。
当我从命令行 运行 我的应用程序时,我在我的日志文件中得到 'Started'。
当我从命令行 'myservice install' 安装我的服务,然后从 service.msc 启动它时,我也在我的日志文件中得到 'Started'。
当我使用命令行 'myservice install start' 安装并启动我的服务时,我的服务已安装并启动,但我的日志文件中没有 'Started'。
private static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
HostFactory.Run(x =>
{
x.UseLog4Net();
x.Service<MonitorService>(s =>
{
s.ConstructUsing(name => new MonitorService());
s.WhenStarted(tc => tc.Start());
s.WhenStopped(tc => tc.Stop());
});
x.RunAsLocalSystem();
x.SetDescription("Monitor Service");
x.SetDisplayName("Monitor Service");
x.SetServiceName("MonitorService");
});
我的监控服务class:
public class MonitorService
{
private static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
public MonitorData GetData()
{
return new MonitorData();
}
public void Start()
{
HostLogger.Get<MonitorService>().Info("Started");
}
public void Stop()
{
HostLogger.Get<MonitorService>().Info("Stopped");
}
}
运行 它自己和 运行 服务之间的唯一真正区别是应用程序运行的上下文。这很可能是权限问题。
我已经使用 TopShelf 和 Log4net 创建了一个监视器 windows 服务进行日志记录。
当我从命令行 运行 我的应用程序时,我在我的日志文件中得到 'Started'。
当我从命令行 'myservice install' 安装我的服务,然后从 service.msc 启动它时,我也在我的日志文件中得到 'Started'。
当我使用命令行 'myservice install start' 安装并启动我的服务时,我的服务已安装并启动,但我的日志文件中没有 'Started'。
private static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
HostFactory.Run(x =>
{
x.UseLog4Net();
x.Service<MonitorService>(s =>
{
s.ConstructUsing(name => new MonitorService());
s.WhenStarted(tc => tc.Start());
s.WhenStopped(tc => tc.Stop());
});
x.RunAsLocalSystem();
x.SetDescription("Monitor Service");
x.SetDisplayName("Monitor Service");
x.SetServiceName("MonitorService");
});
我的监控服务class:
public class MonitorService
{
private static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
public MonitorData GetData()
{
return new MonitorData();
}
public void Start()
{
HostLogger.Get<MonitorService>().Info("Started");
}
public void Stop()
{
HostLogger.Get<MonitorService>().Info("Stopped");
}
}
运行 它自己和 运行 服务之间的唯一真正区别是应用程序运行的上下文。这很可能是权限问题。