для Отладка используйте этот шаблон:
1.Добавьте этот метод в WindowsService1
class:
public void OnDebug()
{
OnStart(null);
}
2.In Program.cs
измените файлчто-то вроде этого:
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
static void Main()
{
#if DEBUG
var Service = new WindowsService1();
Service.OnDebug();
#else
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new WindowsService1()
};
ServiceBase.Run(ServicesToRun);
#endif
}
}
Таким образом, вы можете запустить свой код в сеансе пользователя и проверить возможные проблемы (не связанные с пользователем проблемы) .
** Не кладите все свои коды на метод OnStart
.Состояние службы меняется на Started
всякий раз, когда OnStart
заканчивается.
** Вместо этого используйте поток, чтобы вы работали:
System.Threading.Thread MainThread { get; set; } = null;
protected override void OnStart(string[] args)
{
MainThread = new System.Threading.Thread(new System.Threading.ThreadStart(new Action(()=>{
// Put your codes here ...
})));
MainThread.Start();
}
protected override void OnStop()
{
MainThread?.Abort();
}
В большинстве случаев ваша ошибка возникает из-за этой проблемы.