从services.msc启动我的服务时,Topshelf有不同的行为

时间:2015-07-02 17:31:03

标签: windows-services log4net topshelf

我使用TopShelf和Log4net创建了一个监控窗口服务进行日志记录。

当我从命令行运行我的应用程序时,我的日志文件中出现了“已启动”。

当我从命令行'myservice install'安装我的服务然后从service.msc启动它时,我的日志文件中也有'Started'。

当我使用命令行'myservice install start'安装并启动我的服务时,我的服务已安装并启动,但我的日志文件中没有'已启动'。

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

我的监控服务类:

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

1 个答案:

答案 0 :(得分:1)

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