我使用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");
}
}
答案 0 :(得分:1)
自己运行和运行服务之间唯一真正的区别是应用程序运行的上下文。这很可能是权限问题。