У меня проблема ... когда я вручную запускаю / останавливаю службу windows, она работает как положено, и я получаю запись в журнале. Тем не менее, если я выключаю и перезагружаю машину, статус службы работает, но он не регистрировал сообщение о остановке, когда компьютер был выключен, и не регистрировал сообщение о запуске, когда он был включен. Операционная система Windows 10.
Я схожу с ума по этой проблеме. Этот код является наиболее базовым c windows сервисом, написанным на C# и записывающим в журнал методы OnStart и OnClose. Больше ничего.
Я также пытался писать в файловой системе с теми же результатами. Когда руководство запускается / останавливается, оно успешно; но при автоматическом запуске c или при отключении системы происходит сбой.
У меня закончились идеи.
Это код, который я запускаю:
public partial class Service1 : ServiceBase
{
private bool _loggedLogPath = false;
public Service1()
{
InitializeComponent();
this.AutoLog = true;
this.CanHandlePowerEvent = true;
this.CanHandleSessionChangeEvent = true;
this.CanPauseAndContinue = true;
this.CanShutdown = true;
this.CanStop = true;
this.CanStop = true;
}
private void LogToFile(string message)
{
try
{
string path = Path.Combine(Environment.GetFolderPath(System.Environment.SpecialFolder.CommonApplicationData), "TestService.txt");
using (StreamWriter writer = new StreamWriter(path, true))
{
writer.WriteLine(String.Concat(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), ": ", message));
writer.Flush();
}
if (!this._loggedLogPath)
{
this.EventLog.WriteEntry(String.Concat("The log path is: ", path));
this._loggedLogPath = true;
}
}
catch
{
// Ignore exceptions to avoid crashing the service.
}
}
protected override void OnContinue()
{
this.EventLog.WriteEntry("OnContinue method Called.");
LogToFile("OnContinue method called.");
base.OnContinue();
}
protected override void OnPause()
{
this.EventLog.WriteEntry("OnPause method called");
LogToFile("OnPause method called.");
base.OnPause();
}
protected override bool OnPowerEvent(PowerBroadcastStatus powerStatus)
{
this.EventLog.WriteEntry("OnPowerEvent method called");
LogToFile(String.Format("OnPowerEvent method called ({0}).", powerStatus.ToString()));
return base.OnPowerEvent(powerStatus);
}
protected override void OnSessionChange(SessionChangeDescription changeDescription)
{
this.EventLog.WriteEntry(String.Format("OnSessionChange method called ({0}).", changeDescription.Reason.ToString()));
LogToFile(String.Format("OnSessionChange method called ({0}).", changeDescription.Reason.ToString()));
base.OnSessionChange(changeDescription);
}
protected override void OnShutdown()
{
this.EventLog.WriteEntry("OnShutdown method called.");
LogToFile("OnShutdown method called.");
base.OnShutdown();
}
protected override void OnStart(string[] args)
{
this.EventLog.WriteEntry("OnStart method called.");
LogToFile("OnStart method called.");
base.OnStart(args);
}
protected override void OnStop()
{
this.EventLog.WriteEntry("OnStop method called.");
LogToFile("OnStop method called.");
base.OnStop();
}
}
Зарегистрированные сообщения для файловой системы:
2020-02-05 11:17:10: вызван метод OnSessionChange (RemoteConnect).
2020-02-05 11:17 : 13: вызван метод OnSessionChange (SessionLogoff).
2020-02-05 11:17:14: вызван метод OnSessionChange (ConsoleDisconnect).
2020-02-05 11:17:14: Вызван метод OnSessionChange (RemoteDisconnect).
2020-02-05 11:17:15: Вызван метод OnSessionChange (ConsoleConnect).
2020-02-05 11:17:15: Вызван метод OnPowerEvent (Suspend).
2020-02-05 11:17:50: Вызван метод OnPowerEvent (ResumeSuspend).
2020-02-05 11:17:50: Вызван метод OnPowerEvent (ResumeAutomati c).
2020-02-05 11:18:12: Вызван метод OnSessionChange (SessionLogon).