从 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");
    }
}

运行 它自己和 运行 服务之间的唯一真正区别是应用程序运行的上下文。这很可能是权限问题。